DMX512 send/recv library with STM32 slave support originally from http://mbed.org/users/okini3939/notebook/dmx512

Fork of DMX by Suga koubou

Committer:
Ingram
Date:
Sat Mar 04 10:24:03 2017 +0000
Revision:
21:36276a92303f
Parent:
20:908740273e88
Remove deprecations

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);
Ingram 20:908740273e88 85
Ingram 20:908740273e88 86 void attach(void (*function)(void));
okini3939 0:cbff6bf41542 87
okini3939 0:cbff6bf41542 88 protected:
okini3939 0:cbff6bf41542 89
okini3939 0:cbff6bf41542 90 void int_timer ();
okini3939 0:cbff6bf41542 91 void int_tx ();
okini3939 0:cbff6bf41542 92 void int_rx ();
Ingram 20:908740273e88 93 void on_received();
okini3939 0:cbff6bf41542 94
okini3939 14:cef8749fd54d 95 // Serial _dmx;
okini3939 13:9841af9ac344 96 RawSerial _dmx;
okini3939 0:cbff6bf41542 97 Timeout timeout01;
okini3939 6:9e7b4eeac6ec 98 volatile DMX_MODE mode_tx, mode_rx;
okini3939 6:9e7b4eeac6ec 99 volatile int addr_tx, addr_rx;
okini3939 6:9e7b4eeac6ec 100 unsigned char data_tx[DMX_SIZE];
Ingram 20:908740273e88 101 unsigned char data_rx_working[DMX_SIZE];
okini3939 6:9e7b4eeac6ec 102 unsigned char data_rx[DMX_SIZE];
okini3939 18:69d65ca92bcc 103 int is_received, is_sent;
okini3939 18:69d65ca92bcc 104 int time_break, time_mab, time_mbb;
Ingram 21:36276a92303f 105 Callback<void()> on_rx;
okini3939 6:9e7b4eeac6ec 106
okini3939 6:9e7b4eeac6ec 107 private:
okini3939 13:9841af9ac344 108 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088)
okini3939 8:d4a45bba41d2 109 LPC_UART_TypeDef *_uart;
okini3939 15:4ea4a31c7609 110 #elif defined(TARGET_LPC11UXX)
okini3939 8:d4a45bba41d2 111 LPC_USART_Type *_uart;
stanly88 10:b748aab8404c 112 #elif defined(TARGET_LPC11XX)
stanly88 10:b748aab8404c 113 LPC_UART_TypeDef *_uart;
Ingram 19:6534f3ffdfec 114 #elif defined(TARGET_STM)
Ingram 19:6534f3ffdfec 115 USART_TypeDef *_uart;
okini3939 13:9841af9ac344 116 #else
okini3939 13:9841af9ac344 117 #error "this CPU not supported."
okini3939 5:72039cd4c874 118 #endif
okini3939 0:cbff6bf41542 119
okini3939 0:cbff6bf41542 120 };
okini3939 0:cbff6bf41542 121
okini3939 0:cbff6bf41542 122 #endif