DMX512, RDM send/recv library http://mbed.org/users/okini3939/notebook/dmx512

Dependents:   dmx_test ArtNodeLED SPK-DVIMXR SPK-DMXer ... more

DMX512 send/recv library

DMX512 is protocol for lighting.

調光プロトコル DMX512 を送受信するライブラリです。

see: http://mbed.org/users/okini3939/notebook/dmx512/

LPC1114 support is thanks to Stanly Chen

Committer:
okini3939
Date:
Mon Jan 11 06:17:04 2016 +0000
Revision:
18:69d65ca92bcc
Parent:
17:c9198630ba05
Child:
19:ae8fd2ba7c53
fix isReceived, isSent

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:cbff6bf41542 1 /*
okini3939 0:cbff6bf41542 2 * DMX512 send/recv library
okini3939 6:9e7b4eeac6ec 3 * Copyright (c) 2013 Hiroshi Suga
okini3939 0:cbff6bf41542 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:cbff6bf41542 5 */
okini3939 0:cbff6bf41542 6
okini3939 7:16d6874076dd 7 /** @file
okini3939 0:cbff6bf41542 8 * @brief DMX512 send/recv
okini3939 0:cbff6bf41542 9 */
okini3939 0:cbff6bf41542 10
okini3939 0:cbff6bf41542 11 #ifndef DMX_H
okini3939 0:cbff6bf41542 12 #define DMX_H
okini3939 0:cbff6bf41542 13
okini3939 0:cbff6bf41542 14 #include "mbed.h"
okini3939 14:cef8749fd54d 15 #include "RawSerial.h"
okini3939 0:cbff6bf41542 16
okini3939 18:69d65ca92bcc 17 //#define DMX_UART_DIRECT
okini3939 0:cbff6bf41542 18
okini3939 18:69d65ca92bcc 19 #define DMX_SIZE 512
okini3939 18:69d65ca92bcc 20 #define DMX_START_CODE 0
okini3939 18:69d65ca92bcc 21
okini3939 18:69d65ca92bcc 22 #define DMX_TIME_BREAK 100 // 100us (88us-1s)
okini3939 18:69d65ca92bcc 23 #define DMX_TIME_MAB 12 // 12us (8us-1s)
okini3939 18:69d65ca92bcc 24 #define DMX_TIME_MBB 200 // 10us (0-1s)
okini3939 0:cbff6bf41542 25
okini3939 0:cbff6bf41542 26 enum DMX_MODE {
okini3939 0:cbff6bf41542 27 DMX_MODE_BEGIN,
okini3939 0:cbff6bf41542 28 DMX_MODE_START,
okini3939 0:cbff6bf41542 29 DMX_MODE_BREAK,
okini3939 0:cbff6bf41542 30 DMX_MODE_MAB,
okini3939 0:cbff6bf41542 31 DMX_MODE_DATA,
okini3939 0:cbff6bf41542 32 DMX_MODE_ERROR,
okini3939 4:dd0544c80096 33 DMX_MODE_STOP,
okini3939 0:cbff6bf41542 34 };
okini3939 0:cbff6bf41542 35
okini3939 0:cbff6bf41542 36 /** DMX512 class (sender/client)
okini3939 0:cbff6bf41542 37 */
okini3939 0:cbff6bf41542 38 class DMX {
okini3939 0:cbff6bf41542 39 public:
okini3939 0:cbff6bf41542 40 /** init DMX class
okini3939 0:cbff6bf41542 41 * @param p_tx TX serial port (p9, p13, p28)
okini3939 0:cbff6bf41542 42 * @param p_rx RX serial port (p10, p14, p27)
okini3939 0:cbff6bf41542 43 */
okini3939 0:cbff6bf41542 44 DMX (PinName p_tx, PinName p_rx);
okini3939 0:cbff6bf41542 45
okini3939 6:9e7b4eeac6ec 46 /** Send the data
okini3939 6:9e7b4eeac6ec 47 * @param addr DMX data address (0-511)
okini3939 0:cbff6bf41542 48 * @param data DMX data (0-255)
okini3939 0:cbff6bf41542 49 */
okini3939 6:9e7b4eeac6ec 50 void put (int addr, int data);
okini3939 6:9e7b4eeac6ec 51 /** Send the data
okini3939 6:9e7b4eeac6ec 52 * @param buf DMX data buffer
okini3939 6:9e7b4eeac6ec 53 * @param addr DMX data address
okini3939 6:9e7b4eeac6ec 54 * @param len data length
okini3939 6:9e7b4eeac6ec 55 */
okini3939 6:9e7b4eeac6ec 56 void put (unsigned char *buf, int addr = 0, int len = DMX_SIZE);
okini3939 0:cbff6bf41542 57
okini3939 6:9e7b4eeac6ec 58 /** Send the data
okini3939 7:16d6874076dd 59 * @param addr DMX data address (0-511)
okini3939 0:cbff6bf41542 60 * @return DMX data (0-255)
okini3939 0:cbff6bf41542 61 */
okini3939 6:9e7b4eeac6ec 62 int get (int addr);
okini3939 6:9e7b4eeac6ec 63 /** Send the data
okini3939 6:9e7b4eeac6ec 64 * @param buf DMX data buffer
okini3939 6:9e7b4eeac6ec 65 * @param addr DMX data address
okini3939 6:9e7b4eeac6ec 66 * @param len data length
okini3939 6:9e7b4eeac6ec 67 */
okini3939 6:9e7b4eeac6ec 68 void get (unsigned char *buf, int addr = 0, int len = DMX_SIZE);
okini3939 0:cbff6bf41542 69
okini3939 6:9e7b4eeac6ec 70 /** Start DMX send operation
okini3939 4:dd0544c80096 71 */
okini3939 4:dd0544c80096 72 void start ();
okini3939 6:9e7b4eeac6ec 73 /** Stop DMX send operation
okini3939 4:dd0544c80096 74 */
okini3939 4:dd0544c80096 75 void stop ();
okini3939 12:1f176eee2d28 76 /** Clear DMX data
okini3939 12:1f176eee2d28 77 */
okini3939 12:1f176eee2d28 78 void clear ();
okini3939 3:2eb66b4d99bd 79
okini3939 18:69d65ca92bcc 80 int isReceived ();
okini3939 17:c9198630ba05 81 int isSent ();
okini3939 17:c9198630ba05 82 unsigned char *getRxBuffer ();
okini3939 17:c9198630ba05 83 unsigned char *getTxBuffer ();
okini3939 18:69d65ca92bcc 84 int setTimingParameters (int breaktime, int mab, int mbb);
okini3939 0:cbff6bf41542 85
okini3939 0:cbff6bf41542 86 protected:
okini3939 0:cbff6bf41542 87
okini3939 0:cbff6bf41542 88 void int_timer ();
okini3939 0:cbff6bf41542 89 void int_tx ();
okini3939 0:cbff6bf41542 90 void int_rx ();
okini3939 0:cbff6bf41542 91
okini3939 14:cef8749fd54d 92 // Serial _dmx;
okini3939 13:9841af9ac344 93 RawSerial _dmx;
okini3939 0:cbff6bf41542 94 Timeout timeout01;
okini3939 6:9e7b4eeac6ec 95 volatile DMX_MODE mode_tx, mode_rx;
okini3939 6:9e7b4eeac6ec 96 volatile int addr_tx, addr_rx;
okini3939 6:9e7b4eeac6ec 97 unsigned char data_tx[DMX_SIZE];
okini3939 6:9e7b4eeac6ec 98 unsigned char data_rx[DMX_SIZE];
okini3939 18:69d65ca92bcc 99 int is_received, is_sent;
okini3939 18:69d65ca92bcc 100 int time_break, time_mab, time_mbb;
okini3939 6:9e7b4eeac6ec 101
okini3939 6:9e7b4eeac6ec 102 private:
okini3939 13:9841af9ac344 103 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088)
okini3939 8:d4a45bba41d2 104 LPC_UART_TypeDef *_uart;
okini3939 15:4ea4a31c7609 105 #elif defined(TARGET_LPC11UXX)
okini3939 8:d4a45bba41d2 106 LPC_USART_Type *_uart;
stanly88 10:b748aab8404c 107 #elif defined(TARGET_LPC11XX)
stanly88 10:b748aab8404c 108 LPC_UART_TypeDef *_uart;
okini3939 13:9841af9ac344 109 #else
okini3939 13:9841af9ac344 110 #error "this CPU not supported."
okini3939 5:72039cd4c874 111 #endif
okini3939 0:cbff6bf41542 112
okini3939 0:cbff6bf41542 113 };
okini3939 0:cbff6bf41542 114
okini3939 0:cbff6bf41542 115 #endif