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

Files at this revision

API Documentation at this revision

Comitter:
okini3939
Date:
Sun Jan 13 01:33:17 2013 +0000
Parent:
5:72039cd4c874
Child:
7:16d6874076dd
Commit message:
support put/get buffer

Changed in this revision

DMX.cpp Show annotated file Show diff for this revision Revisions of this file
DMX.h Show annotated file Show diff for this revision Revisions of this file
--- a/DMX.cpp	Fri Jan 04 04:31:53 2013 +0000
+++ b/DMX.cpp	Sun Jan 13 01:33:17 2013 +0000
@@ -1,6 +1,6 @@
 /*
  * DMX512 send/recv library
- * Copyright (c) 2011 Hiroshi Suga
+ * Copyright (c) 2013 Hiroshi Suga
  * Released under the MIT License: http://mbed.org/license/mit
  */
 
@@ -71,12 +71,26 @@
 //    timeout01.attach_us(this, &DMX::int_timer, DMX_TIME_BETWEEN);
 }
 
-void DMX::put (int ch, int data) {
-    data_tx[ch] = data;
+void DMX::put (int addr, int data) {
+    if (addr < 0 || addr >= DMX_SIZE) return;
+    data_tx[addr] = data;
 }
 
-int DMX::get (int ch) {
-    return data_rx[ch];
+void DMX::put (unsigned char *buf, int addr, int len) {
+    if (addr < 0 || addr >= DMX_SIZE) return;
+    if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;
+    memcpy(&data_tx[addr], buf, len);
+}
+
+int DMX::get (int addr) {
+    if (addr < 0 || addr >= DMX_SIZE) return -1;
+    return data_rx[addr];
+}
+
+void DMX::get (unsigned char *buf, int addr, int len) {
+    if (addr < 0 || addr >= DMX_SIZE) return;
+    if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;
+    memcpy(buf, &data_rx[addr], len);
 }
 
 void DMX::int_timer () {
--- a/DMX.h	Fri Jan 04 04:31:53 2013 +0000
+++ b/DMX.h	Sun Jan 13 01:33:17 2013 +0000
@@ -1,6 +1,6 @@
 /*
  * DMX512 send/recv library
- * Copyright (c) 2011 Hiroshi Suga
+ * Copyright (c) 2013 Hiroshi Suga
  * Released under the MIT License: http://mbed.org/license/mit
  */
 
@@ -40,22 +40,34 @@
      */
     DMX (PinName p_tx, PinName p_rx); 
 
-    /** Send the message
-     * @param ch DMX data address (0-511)
+    /** Send the data
+     * @param addr DMX data address (0-511)
      * @param data DMX data (0-255)
      */
-    void put (int ch, int data);
+    void put (int addr, int data);
+    /** Send the data
+     * @param buf DMX data buffer
+     * @param addr DMX data address
+     * @param len data length
+     */
+    void put (unsigned char *buf, int addr = 0, int len = DMX_SIZE);
 
-    /** Send the message
+    /** Send the data
      * @param ch DMX data address (0-511)
      * @return DMX data (0-255)
      */
-    int get (int ch);
+    int get (int addr);
+    /** Send the data
+     * @param buf DMX data buffer
+     * @param addr DMX data address
+     * @param len data length
+     */
+    void get (unsigned char *buf, int addr = 0, int len = DMX_SIZE);
 
-    /** Start DMX send
+    /** Start DMX send operation
      */
     void start ();
-    /** Stop DMX send
+    /** Stop DMX send operation
      */
     void stop ();
 
@@ -69,6 +81,12 @@
 
     Serial _dmx;
     Timeout timeout01;
+    volatile DMX_MODE mode_tx, mode_rx;
+    volatile int addr_tx, addr_rx;
+    unsigned char data_tx[DMX_SIZE];
+    unsigned char data_rx[DMX_SIZE];
+
+private:
 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
     __IO uint8_t *uart_lcr;
     __I  uint8_t *uart_lsr;
@@ -80,12 +98,6 @@
     __IO uint32_t *uart_thr;
     __I  uint32_t *uart_rbr;
 #endif
-    volatile DMX_MODE mode_tx, mode_rx;
-    volatile int addr_tx, addr_rx;
-    unsigned char data_tx[DMX_SIZE];
-    unsigned char data_rx[DMX_SIZE];
-
-private:
 
 };