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:
Fri Oct 20 00:44:06 2017 +0000
Revision:
19:ae8fd2ba7c53
Parent:
18:69d65ca92bcc
supported RDM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:cbff6bf41542 1 /*
okini3939 19:ae8fd2ba7c53 2 * DMX512, RDM send/recv library
okini3939 19:ae8fd2ba7c53 3 * Copyright (c) 2017 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 #include "mbed.h"
okini3939 0:cbff6bf41542 12 #include "DMX.h"
okini3939 0:cbff6bf41542 13
okini3939 19:ae8fd2ba7c53 14
okini3939 19:ae8fd2ba7c53 15 DMX::DMX (PinName p_tx, PinName p_rx, PinName p_xmit) : _dmx(p_tx, p_rx) {
okini3939 0:cbff6bf41542 16
okini3939 19:ae8fd2ba7c53 17 if (p_xmit == NC) {
okini3939 19:ae8fd2ba7c53 18 _xmit = NULL;
okini3939 19:ae8fd2ba7c53 19 } else {
okini3939 19:ae8fd2ba7c53 20 _xmit = new DigitalOut(p_xmit, XMIT_RX);
okini3939 19:ae8fd2ba7c53 21 }
okini3939 12:1f176eee2d28 22 clear();
okini3939 4:dd0544c80096 23 // mode_tx = DMX_MODE_BEGIN;
okini3939 4:dd0544c80096 24 mode_tx = DMX_MODE_STOP;
okini3939 0:cbff6bf41542 25 mode_rx = DMX_MODE_BEGIN;
okini3939 18:69d65ca92bcc 26 is_received = 0;
okini3939 18:69d65ca92bcc 27 is_sent = 0;
okini3939 16:4eeb749806e5 28 memset(data_tx, 0, sizeof(data_tx));
okini3939 16:4eeb749806e5 29 memset(data_rx, 0, sizeof(data_rx));
okini3939 18:69d65ca92bcc 30 time_break = DMX_TIME_BREAK;
okini3939 18:69d65ca92bcc 31 time_mab = DMX_TIME_MAB;
okini3939 18:69d65ca92bcc 32 time_mbb = DMX_TIME_MBB;
okini3939 0:cbff6bf41542 33
okini3939 19:ae8fd2ba7c53 34 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 35 mode_rdm = 0;
okini3939 19:ae8fd2ba7c53 36 rdm_mute = 0;
okini3939 19:ae8fd2ba7c53 37 rdm_msgcount = 0;
okini3939 19:ae8fd2ba7c53 38 rdm_transno = 0;
okini3939 19:ae8fd2ba7c53 39 cb_RdmParser = NULL;
okini3939 19:ae8fd2ba7c53 40 buf_uid_size = 0;
okini3939 19:ae8fd2ba7c53 41 #endif
okini3939 19:ae8fd2ba7c53 42
okini3939 5:72039cd4c874 43 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
okini3939 11:cb132e066057 44 if (p_rx == P0_3) {
okini3939 11:cb132e066057 45 _uart = (LPC_UART_TypeDef*)LPC_UART0;
okini3939 11:cb132e066057 46 NVIC_SetPriority(UART0_IRQn, 1);
okini3939 0:cbff6bf41542 47 } else
okini3939 0:cbff6bf41542 48 if (p_rx == p14) {
okini3939 8:d4a45bba41d2 49 _uart = (LPC_UART_TypeDef*)LPC_UART1;
okini3939 0:cbff6bf41542 50 NVIC_SetPriority(UART1_IRQn, 1);
okini3939 0:cbff6bf41542 51 } else
okini3939 0:cbff6bf41542 52 if (p_rx == p27) {
okini3939 8:d4a45bba41d2 53 _uart = LPC_UART2;
okini3939 0:cbff6bf41542 54 NVIC_SetPriority(UART2_IRQn, 1);
okini3939 11:cb132e066057 55 } else
okini3939 11:cb132e066057 56 if (p_rx == p10) {
okini3939 11:cb132e066057 57 _uart = LPC_UART3;
okini3939 11:cb132e066057 58 NVIC_SetPriority(UART3_IRQn, 1);
okini3939 0:cbff6bf41542 59 }
okini3939 13:9841af9ac344 60 #elif defined(TARGET_LPC4088)
okini3939 16:4eeb749806e5 61 if (p_rx == p10 || p_rx == P0_26 || p_rx == P4_29) {
okini3939 13:9841af9ac344 62 _uart = LPC_UART3;
okini3939 13:9841af9ac344 63 NVIC_SetPriority(UART3_IRQn, 1);
okini3939 13:9841af9ac344 64 } else
okini3939 13:9841af9ac344 65 if (p_rx == p31) {
okini3939 13:9841af9ac344 66 _uart = (LPC_UART_TypeDef*)LPC_UART4;
okini3939 13:9841af9ac344 67 NVIC_SetPriority(UART4_IRQn, 1);
okini3939 16:4eeb749806e5 68 } else
okini3939 16:4eeb749806e5 69 if (p_rx == P0_3) {
okini3939 16:4eeb749806e5 70 _uart = LPC_UART0;
okini3939 16:4eeb749806e5 71 NVIC_SetPriority(UART0_IRQn, 1);
okini3939 16:4eeb749806e5 72 } else
okini3939 16:4eeb749806e5 73 if (p_rx == P0_16 || p_rx == P2_1 || p_rx == P3_17) {
okini3939 16:4eeb749806e5 74 _uart = (LPC_UART_TypeDef*)LPC_UART1;
okini3939 16:4eeb749806e5 75 NVIC_SetPriority(UART1_IRQn, 1);
okini3939 16:4eeb749806e5 76 } else
okini3939 16:4eeb749806e5 77 if (p_rx == P0_11 || p_rx == P2_9 || p_rx == P4_23) {
okini3939 16:4eeb749806e5 78 _uart = LPC_UART2;
okini3939 16:4eeb749806e5 79 NVIC_SetPriority(UART2_IRQn, 1);
okini3939 13:9841af9ac344 80 }
okini3939 15:4ea4a31c7609 81 #elif defined(TARGET_LPC11UXX)
okini3939 5:72039cd4c874 82 if (p_rx == p10) {
okini3939 8:d4a45bba41d2 83 _uart = LPC_USART;
okini3939 5:72039cd4c874 84 NVIC_SetPriority(UART_IRQn, 1);
okini3939 5:72039cd4c874 85 }
stanly88 10:b748aab8404c 86 #elif defined(TARGET_LPC11XX)
okini3939 11:cb132e066057 87 // LPC1114 support by Stanly Chen
stanly88 10:b748aab8404c 88 if (p_rx == P1_6) {
okini3939 13:9841af9ac344 89 _uart = (LPC_UART_TypeDef*)UART_0;
stanly88 10:b748aab8404c 90 NVIC_SetPriority(UART_IRQn, 1);
stanly88 10:b748aab8404c 91 }
okini3939 5:72039cd4c874 92 #endif
okini3939 0:cbff6bf41542 93
okini3939 5:72039cd4c874 94 _dmx.baud(250000);
okini3939 5:72039cd4c874 95 _dmx.format(8, Serial::None, 2);
okini3939 5:72039cd4c874 96 _dmx.attach(this, &DMX::int_rx, Serial::RxIrq);
okini3939 0:cbff6bf41542 97
okini3939 4:dd0544c80096 98 // timeout01.attach_us(this, &DMX::int_timer, DMX_TIME_BETWEEN);
okini3939 0:cbff6bf41542 99 }
okini3939 0:cbff6bf41542 100
okini3939 6:9e7b4eeac6ec 101 void DMX::put (int addr, int data) {
okini3939 6:9e7b4eeac6ec 102 if (addr < 0 || addr >= DMX_SIZE) return;
okini3939 6:9e7b4eeac6ec 103 data_tx[addr] = data;
okini3939 0:cbff6bf41542 104 }
okini3939 0:cbff6bf41542 105
okini3939 6:9e7b4eeac6ec 106 void DMX::put (unsigned char *buf, int addr, int len) {
okini3939 6:9e7b4eeac6ec 107 if (addr < 0 || addr >= DMX_SIZE) return;
okini3939 6:9e7b4eeac6ec 108 if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;
okini3939 6:9e7b4eeac6ec 109 memcpy(&data_tx[addr], buf, len);
okini3939 6:9e7b4eeac6ec 110 }
okini3939 6:9e7b4eeac6ec 111
okini3939 6:9e7b4eeac6ec 112 int DMX::get (int addr) {
okini3939 6:9e7b4eeac6ec 113 if (addr < 0 || addr >= DMX_SIZE) return -1;
okini3939 6:9e7b4eeac6ec 114 return data_rx[addr];
okini3939 6:9e7b4eeac6ec 115 }
okini3939 6:9e7b4eeac6ec 116
okini3939 6:9e7b4eeac6ec 117 void DMX::get (unsigned char *buf, int addr, int len) {
okini3939 6:9e7b4eeac6ec 118 if (addr < 0 || addr >= DMX_SIZE) return;
okini3939 6:9e7b4eeac6ec 119 if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;
okini3939 6:9e7b4eeac6ec 120 memcpy(buf, &data_rx[addr], len);
okini3939 0:cbff6bf41542 121 }
okini3939 0:cbff6bf41542 122
okini3939 0:cbff6bf41542 123 void DMX::int_timer () {
okini3939 0:cbff6bf41542 124
okini3939 0:cbff6bf41542 125 switch (mode_tx) {
okini3939 0:cbff6bf41542 126 case DMX_MODE_BEGIN:
okini3939 0:cbff6bf41542 127 // Break Time
okini3939 0:cbff6bf41542 128 timeout01.detach();
okini3939 19:ae8fd2ba7c53 129 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 130 if (mode_rdm && _xmit) _xmit->write(XMIT_TX);
okini3939 19:ae8fd2ba7c53 131 #endif
okini3939 8:d4a45bba41d2 132 _uart->LCR |= (1 << 6);
okini3939 0:cbff6bf41542 133 mode_tx = DMX_MODE_BREAK;
okini3939 18:69d65ca92bcc 134 timeout01.attach_us(this, &DMX::int_timer, time_break);
okini3939 0:cbff6bf41542 135 break;
okini3939 0:cbff6bf41542 136
okini3939 0:cbff6bf41542 137 case DMX_MODE_BREAK:
okini3939 0:cbff6bf41542 138 // Mark After Break
okini3939 0:cbff6bf41542 139 timeout01.detach();
okini3939 8:d4a45bba41d2 140 _uart->LCR &= ~(1 << 6);
okini3939 0:cbff6bf41542 141 mode_tx = DMX_MODE_MAB;
okini3939 18:69d65ca92bcc 142 timeout01.attach_us(this, &DMX::int_timer, time_mab);
okini3939 0:cbff6bf41542 143 break;
okini3939 0:cbff6bf41542 144
okini3939 0:cbff6bf41542 145 case DMX_MODE_MAB:
okini3939 0:cbff6bf41542 146 // Start code
okini3939 0:cbff6bf41542 147 timeout01.detach();
okini3939 0:cbff6bf41542 148 addr_tx = 0;
okini3939 0:cbff6bf41542 149 mode_tx = DMX_MODE_DATA;
okini3939 2:d7677060f8eb 150 #ifdef DMX_UART_DIRECT
okini3939 9:e687f321c428 151 while(!(_uart->LSR & (1<<5)));
okini3939 19:ae8fd2ba7c53 152 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 153 if (mode_rdm) {
okini3939 19:ae8fd2ba7c53 154 _uart->THR = RDM_START_CODE;
okini3939 19:ae8fd2ba7c53 155 } else {
okini3939 19:ae8fd2ba7c53 156 _uart->THR = DMX_START_CODE;
okini3939 19:ae8fd2ba7c53 157 }
okini3939 19:ae8fd2ba7c53 158 #else
okini3939 9:e687f321c428 159 _uart->THR = DMX_START_CODE;
okini3939 19:ae8fd2ba7c53 160 #endif // RDM_ENABLE
okini3939 19:ae8fd2ba7c53 161 #else
okini3939 19:ae8fd2ba7c53 162 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 163 if (mode_rdm) {
okini3939 19:ae8fd2ba7c53 164 _dmx.putc(RDM_START_CODE);
okini3939 19:ae8fd2ba7c53 165 } else {
okini3939 19:ae8fd2ba7c53 166 _dmx.putc(DMX_START_CODE);
okini3939 19:ae8fd2ba7c53 167 }
okini3939 2:d7677060f8eb 168 #else
okini3939 9:e687f321c428 169 _dmx.putc(DMX_START_CODE);
okini3939 19:ae8fd2ba7c53 170 #endif // RDM_ENABLE
okini3939 2:d7677060f8eb 171 #endif
okini3939 19:ae8fd2ba7c53 172 _dmx.attach(this, &DMX::int_tx, Serial::TxIrq);
okini3939 0:cbff6bf41542 173 break;
okini3939 0:cbff6bf41542 174 }
okini3939 0:cbff6bf41542 175 }
okini3939 0:cbff6bf41542 176
okini3939 0:cbff6bf41542 177 void DMX::int_tx () {
okini3939 0:cbff6bf41542 178 // Data
okini3939 0:cbff6bf41542 179 if (mode_tx == DMX_MODE_DATA) {
okini3939 19:ae8fd2ba7c53 180 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 181 if (mode_rdm && addr_tx < data_rdm[1] + 1) {
okini3939 19:ae8fd2ba7c53 182 // RDM data
okini3939 19:ae8fd2ba7c53 183 _dmx.putc(data_rdm[addr_tx]);
okini3939 19:ae8fd2ba7c53 184 addr_tx ++;
okini3939 19:ae8fd2ba7c53 185 } else
okini3939 19:ae8fd2ba7c53 186 if (!mode_rdm && addr_tx < DMX_SIZE) {
okini3939 19:ae8fd2ba7c53 187 #else
okini3939 0:cbff6bf41542 188 if (addr_tx < DMX_SIZE) {
okini3939 19:ae8fd2ba7c53 189 #endif // RDM_ENABLE
okini3939 19:ae8fd2ba7c53 190 // DMX data
okini3939 1:f0d988e15810 191 #ifdef DMX_UART_DIRECT
okini3939 8:d4a45bba41d2 192 _uart->THR = (uint8_t)data_tx[addr_tx];
okini3939 0:cbff6bf41542 193 #else
okini3939 5:72039cd4c874 194 _dmx.putc(data_tx[addr_tx]);
okini3939 0:cbff6bf41542 195 #endif
okini3939 0:cbff6bf41542 196 addr_tx ++;
okini3939 0:cbff6bf41542 197 } else {
okini3939 19:ae8fd2ba7c53 198 _dmx.attach(0, Serial::TxIrq); // disable
okini3939 0:cbff6bf41542 199 mode_tx = DMX_MODE_BEGIN;
okini3939 0:cbff6bf41542 200 is_sent = 1;
okini3939 19:ae8fd2ba7c53 201 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 202 if (mode_rdm) {
okini3939 19:ae8fd2ba7c53 203 if (_xmit) _xmit->write(XMIT_RX);
okini3939 19:ae8fd2ba7c53 204 mode_rdm = 0;
okini3939 19:ae8fd2ba7c53 205 mode_tx = DMX_MODE_STOP;
okini3939 19:ae8fd2ba7c53 206 } else {
okini3939 19:ae8fd2ba7c53 207 timeout01.attach_us(this, &DMX::int_timer, time_mbb);
okini3939 19:ae8fd2ba7c53 208 }
okini3939 19:ae8fd2ba7c53 209 #else
okini3939 18:69d65ca92bcc 210 timeout01.attach_us(this, &DMX::int_timer, time_mbb);
okini3939 19:ae8fd2ba7c53 211 #endif // RDM_ENABLE
okini3939 0:cbff6bf41542 212 }
okini3939 0:cbff6bf41542 213 }
okini3939 0:cbff6bf41542 214 }
okini3939 0:cbff6bf41542 215
okini3939 0:cbff6bf41542 216 void DMX::int_rx () {
okini3939 0:cbff6bf41542 217 int flg, dat;
okini3939 0:cbff6bf41542 218
okini3939 8:d4a45bba41d2 219 flg = _uart->LSR;
okini3939 1:f0d988e15810 220 #ifdef DMX_UART_DIRECT
okini3939 8:d4a45bba41d2 221 dat = _uart->RBR;
okini3939 1:f0d988e15810 222 #else
okini3939 5:72039cd4c874 223 dat = _dmx.getc();
okini3939 1:f0d988e15810 224 #endif
okini3939 0:cbff6bf41542 225
okini3939 0:cbff6bf41542 226 if (flg & ((1 << 7)|(1 << 3)|(1 << 4))) {
okini3939 0:cbff6bf41542 227 // Break Time
okini3939 19:ae8fd2ba7c53 228 if (is_rdm_received) {
okini3939 19:ae8fd2ba7c53 229 return;
okini3939 19:ae8fd2ba7c53 230 } else
okini3939 15:4ea4a31c7609 231 if (addr_rx >= 24 && mode_rx == DMX_MODE_DATA) {
okini3939 18:69d65ca92bcc 232 is_received = 1;
okini3939 0:cbff6bf41542 233 }
okini3939 0:cbff6bf41542 234 mode_rx = DMX_MODE_BREAK;
okini3939 0:cbff6bf41542 235 return;
okini3939 0:cbff6bf41542 236 }
okini3939 0:cbff6bf41542 237
okini3939 0:cbff6bf41542 238 if (mode_rx == DMX_MODE_BREAK) {
okini3939 0:cbff6bf41542 239
okini3939 0:cbff6bf41542 240 // Start Code
okini3939 9:e687f321c428 241 if (dat == DMX_START_CODE) {
okini3939 0:cbff6bf41542 242 addr_rx = 0;
okini3939 0:cbff6bf41542 243 mode_rx = DMX_MODE_DATA;
okini3939 19:ae8fd2ba7c53 244 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 245 } else
okini3939 19:ae8fd2ba7c53 246 if (dat == RDM_START_CODE) {
okini3939 19:ae8fd2ba7c53 247 addr_rx = 0;
okini3939 19:ae8fd2ba7c53 248 mode_rx = DMX_MODE_RDM;
okini3939 19:ae8fd2ba7c53 249 #endif
okini3939 0:cbff6bf41542 250 } else {
okini3939 0:cbff6bf41542 251 mode_rx = DMX_MODE_ERROR;
okini3939 0:cbff6bf41542 252 }
okini3939 0:cbff6bf41542 253
okini3939 0:cbff6bf41542 254 } else
okini3939 0:cbff6bf41542 255 if (mode_rx == DMX_MODE_DATA) {
okini3939 0:cbff6bf41542 256
okini3939 0:cbff6bf41542 257 // Data
okini3939 0:cbff6bf41542 258 data_rx[addr_rx] = dat;
okini3939 0:cbff6bf41542 259 addr_rx ++;
okini3939 0:cbff6bf41542 260
okini3939 0:cbff6bf41542 261 if (addr_rx >= DMX_SIZE) {
okini3939 18:69d65ca92bcc 262 is_received = 1;
okini3939 0:cbff6bf41542 263 mode_rx = DMX_MODE_BEGIN;
okini3939 0:cbff6bf41542 264 }
okini3939 19:ae8fd2ba7c53 265
okini3939 19:ae8fd2ba7c53 266 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 267 } else
okini3939 19:ae8fd2ba7c53 268 if (mode_rx == DMX_MODE_RDM) {
okini3939 19:ae8fd2ba7c53 269
okini3939 19:ae8fd2ba7c53 270 // Rdm
okini3939 19:ae8fd2ba7c53 271 data_rx[addr_rx] = dat;
okini3939 19:ae8fd2ba7c53 272 addr_rx ++;
okini3939 19:ae8fd2ba7c53 273
okini3939 19:ae8fd2ba7c53 274 if (addr_rx >= 2 && addr_rx >= data_rx[1] + 1) {
okini3939 19:ae8fd2ba7c53 275 is_rdm_received = 1;
okini3939 19:ae8fd2ba7c53 276 mode_rx = DMX_MODE_BEGIN;
okini3939 19:ae8fd2ba7c53 277 } else
okini3939 19:ae8fd2ba7c53 278 if (addr_rx >= sizeof(data_rdm)) {
okini3939 19:ae8fd2ba7c53 279 mode_rx = DMX_MODE_ERROR;
okini3939 19:ae8fd2ba7c53 280 }
okini3939 19:ae8fd2ba7c53 281 #endif
okini3939 0:cbff6bf41542 282 }
okini3939 0:cbff6bf41542 283 }
okini3939 0:cbff6bf41542 284
okini3939 4:dd0544c80096 285 void DMX::start () {
okini3939 4:dd0544c80096 286 if (mode_tx == DMX_MODE_STOP) {
okini3939 19:ae8fd2ba7c53 287 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 288 if (_xmit) _xmit->write(XMIT_TX);
okini3939 19:ae8fd2ba7c53 289 #endif
okini3939 4:dd0544c80096 290 mode_tx = DMX_MODE_BEGIN;
okini3939 4:dd0544c80096 291 is_sent = 0;
okini3939 18:69d65ca92bcc 292 timeout01.attach_us(this, &DMX::int_timer, time_mbb);
okini3939 4:dd0544c80096 293 }
okini3939 4:dd0544c80096 294 }
okini3939 4:dd0544c80096 295
okini3939 4:dd0544c80096 296 void DMX::stop () {
okini3939 5:72039cd4c874 297 _dmx.attach(0, Serial::TxIrq);
okini3939 3:2eb66b4d99bd 298 timeout01.detach();
okini3939 4:dd0544c80096 299 mode_tx = DMX_MODE_STOP;
okini3939 19:ae8fd2ba7c53 300 #ifdef RDM_ENABLE
okini3939 19:ae8fd2ba7c53 301 if (_xmit) _xmit->write(XMIT_RX);
okini3939 19:ae8fd2ba7c53 302 #endif
okini3939 3:2eb66b4d99bd 303 }
okini3939 12:1f176eee2d28 304
okini3939 12:1f176eee2d28 305 void DMX::clear () {
okini3939 12:1f176eee2d28 306 int i;
okini3939 12:1f176eee2d28 307
okini3939 12:1f176eee2d28 308 for (i = 0; i < DMX_SIZE; i ++) {
okini3939 12:1f176eee2d28 309 data_tx[i] = 0;
okini3939 12:1f176eee2d28 310 data_rx[i] = 0;
okini3939 12:1f176eee2d28 311 }
okini3939 12:1f176eee2d28 312 }
okini3939 17:c9198630ba05 313
okini3939 18:69d65ca92bcc 314 int DMX::isReceived (){
okini3939 18:69d65ca92bcc 315 int r = is_received;
okini3939 18:69d65ca92bcc 316 is_received = 0;
okini3939 17:c9198630ba05 317 return r;
okini3939 17:c9198630ba05 318 }
okini3939 17:c9198630ba05 319
okini3939 17:c9198630ba05 320 int DMX::isSent () {
okini3939 17:c9198630ba05 321 int r = is_sent;
okini3939 17:c9198630ba05 322 is_sent = 0;
okini3939 17:c9198630ba05 323 return r;
okini3939 17:c9198630ba05 324 }
okini3939 17:c9198630ba05 325
okini3939 17:c9198630ba05 326 unsigned char *DMX::getRxBuffer () {
okini3939 17:c9198630ba05 327 return data_rx;
okini3939 17:c9198630ba05 328 }
okini3939 17:c9198630ba05 329
okini3939 17:c9198630ba05 330 unsigned char *DMX::getTxBuffer () {
okini3939 17:c9198630ba05 331 return data_tx;
okini3939 17:c9198630ba05 332 }
okini3939 18:69d65ca92bcc 333
okini3939 18:69d65ca92bcc 334 int DMX::setTimingParameters (int breaktime, int mab, int mbb) {
okini3939 18:69d65ca92bcc 335 if (breaktime < 88 || breaktime > 1000000) return -1;
okini3939 18:69d65ca92bcc 336 if (mab < 8 || mab > 1000000) return -1;
okini3939 18:69d65ca92bcc 337 if (mbb < 0 || mbb > 1000000) return -1;
okini3939 18:69d65ca92bcc 338
okini3939 18:69d65ca92bcc 339 time_break = breaktime;
okini3939 18:69d65ca92bcc 340 time_mab = mab;
okini3939 18:69d65ca92bcc 341 time_mbb = mbb;
okini3939 18:69d65ca92bcc 342 return 0;
okini3939 18:69d65ca92bcc 343 }