Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of DMX by
DMX.h@18:6303931e4102, 2015-03-13 (annotated)
- Committer:
- rosienej
- Date:
- Fri Mar 13 17:36:48 2015 +0000
- Revision:
- 18:6303931e4102
- Parent:
- 16:84a017ef96f8
- Child:
- 19:8a86e35e54a9
Updating docs
Who changed what in which revision?
User | Revision | Line number | New 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 | |
rosienej | 16:84a017ef96f8 | 11 | |
rosienej | 16:84a017ef96f8 | 12 | |
okini3939 | 0:cbff6bf41542 | 13 | #ifndef DMX_H |
okini3939 | 0:cbff6bf41542 | 14 | #define DMX_H |
okini3939 | 0:cbff6bf41542 | 15 | |
okini3939 | 0:cbff6bf41542 | 16 | #include "mbed.h" |
okini3939 | 14:cef8749fd54d | 17 | #include "RawSerial.h" |
okini3939 | 0:cbff6bf41542 | 18 | |
rosienej | 16:84a017ef96f8 | 19 | |
okini3939 | 1:f0d988e15810 | 20 | #define DMX_UART_DIRECT |
okini3939 | 0:cbff6bf41542 | 21 | |
okini3939 | 0:cbff6bf41542 | 22 | #define DMX_SIZE 512 |
okini3939 | 9:e687f321c428 | 23 | #define DMX_TIME_BREAK 100 // 100us (88us-1s) |
okini3939 | 9:e687f321c428 | 24 | #define DMX_TIME_MAB 10 // 10us (8us-1s) |
okini3939 | 15:4ea4a31c7609 | 25 | #define DMX_TIME_BETWEEN 200 // 10us (0-1s) |
okini3939 | 9:e687f321c428 | 26 | #define DMX_START_CODE 0 |
okini3939 | 0:cbff6bf41542 | 27 | |
okini3939 | 0:cbff6bf41542 | 28 | enum DMX_MODE { |
okini3939 | 0:cbff6bf41542 | 29 | DMX_MODE_BEGIN, |
okini3939 | 0:cbff6bf41542 | 30 | DMX_MODE_START, |
okini3939 | 0:cbff6bf41542 | 31 | DMX_MODE_BREAK, |
okini3939 | 0:cbff6bf41542 | 32 | DMX_MODE_MAB, |
okini3939 | 0:cbff6bf41542 | 33 | DMX_MODE_DATA, |
okini3939 | 0:cbff6bf41542 | 34 | DMX_MODE_ERROR, |
okini3939 | 4:dd0544c80096 | 35 | DMX_MODE_STOP, |
okini3939 | 0:cbff6bf41542 | 36 | }; |
okini3939 | 0:cbff6bf41542 | 37 | |
okini3939 | 0:cbff6bf41542 | 38 | /** DMX512 class (sender/client) |
okini3939 | 0:cbff6bf41542 | 39 | */ |
okini3939 | 0:cbff6bf41542 | 40 | class DMX { |
okini3939 | 0:cbff6bf41542 | 41 | public: |
okini3939 | 0:cbff6bf41542 | 42 | /** init DMX class |
okini3939 | 0:cbff6bf41542 | 43 | * @param p_tx TX serial port (p9, p13, p28) |
okini3939 | 0:cbff6bf41542 | 44 | * @param p_rx RX serial port (p10, p14, p27) |
okini3939 | 0:cbff6bf41542 | 45 | */ |
okini3939 | 0:cbff6bf41542 | 46 | DMX (PinName p_tx, PinName p_rx); |
okini3939 | 0:cbff6bf41542 | 47 | |
okini3939 | 6:9e7b4eeac6ec | 48 | /** Send the data |
okini3939 | 6:9e7b4eeac6ec | 49 | * @param addr DMX data address (0-511) |
okini3939 | 0:cbff6bf41542 | 50 | * @param data DMX data (0-255) |
okini3939 | 0:cbff6bf41542 | 51 | */ |
okini3939 | 6:9e7b4eeac6ec | 52 | void put (int addr, int data); |
okini3939 | 6:9e7b4eeac6ec | 53 | /** Send the data |
okini3939 | 6:9e7b4eeac6ec | 54 | * @param buf DMX data buffer |
okini3939 | 6:9e7b4eeac6ec | 55 | * @param addr DMX data address |
okini3939 | 6:9e7b4eeac6ec | 56 | * @param len data length |
okini3939 | 6:9e7b4eeac6ec | 57 | */ |
okini3939 | 6:9e7b4eeac6ec | 58 | void put (unsigned char *buf, int addr = 0, int len = DMX_SIZE); |
okini3939 | 0:cbff6bf41542 | 59 | |
okini3939 | 6:9e7b4eeac6ec | 60 | /** Send the data |
okini3939 | 7:16d6874076dd | 61 | * @param addr DMX data address (0-511) |
okini3939 | 0:cbff6bf41542 | 62 | * @return DMX data (0-255) |
okini3939 | 0:cbff6bf41542 | 63 | */ |
okini3939 | 6:9e7b4eeac6ec | 64 | int get (int addr); |
okini3939 | 6:9e7b4eeac6ec | 65 | /** Send the data |
okini3939 | 6:9e7b4eeac6ec | 66 | * @param buf DMX data buffer |
okini3939 | 6:9e7b4eeac6ec | 67 | * @param addr DMX data address |
okini3939 | 6:9e7b4eeac6ec | 68 | * @param len data length |
okini3939 | 6:9e7b4eeac6ec | 69 | */ |
okini3939 | 6:9e7b4eeac6ec | 70 | void get (unsigned char *buf, int addr = 0, int len = DMX_SIZE); |
okini3939 | 0:cbff6bf41542 | 71 | |
okini3939 | 6:9e7b4eeac6ec | 72 | /** Start DMX send operation |
okini3939 | 4:dd0544c80096 | 73 | */ |
okini3939 | 4:dd0544c80096 | 74 | void start (); |
okini3939 | 6:9e7b4eeac6ec | 75 | /** Stop DMX send operation |
okini3939 | 4:dd0544c80096 | 76 | */ |
okini3939 | 4:dd0544c80096 | 77 | void stop (); |
okini3939 | 12:1f176eee2d28 | 78 | /** Clear DMX data |
okini3939 | 12:1f176eee2d28 | 79 | */ |
okini3939 | 12:1f176eee2d28 | 80 | void clear (); |
okini3939 | 3:2eb66b4d99bd | 81 | |
okini3939 | 0:cbff6bf41542 | 82 | volatile int is_recived, is_sent; |
okini3939 | 0:cbff6bf41542 | 83 | |
okini3939 | 0:cbff6bf41542 | 84 | protected: |
okini3939 | 0:cbff6bf41542 | 85 | |
okini3939 | 0:cbff6bf41542 | 86 | void int_timer (); |
okini3939 | 0:cbff6bf41542 | 87 | void int_tx (); |
okini3939 | 0:cbff6bf41542 | 88 | void int_rx (); |
okini3939 | 0:cbff6bf41542 | 89 | |
okini3939 | 14:cef8749fd54d | 90 | // Serial _dmx; |
okini3939 | 13:9841af9ac344 | 91 | RawSerial _dmx; |
okini3939 | 0:cbff6bf41542 | 92 | Timeout timeout01; |
okini3939 | 6:9e7b4eeac6ec | 93 | volatile DMX_MODE mode_tx, mode_rx; |
okini3939 | 6:9e7b4eeac6ec | 94 | volatile int addr_tx, addr_rx; |
okini3939 | 6:9e7b4eeac6ec | 95 | unsigned char data_tx[DMX_SIZE]; |
okini3939 | 6:9e7b4eeac6ec | 96 | unsigned char data_rx[DMX_SIZE]; |
okini3939 | 6:9e7b4eeac6ec | 97 | |
okini3939 | 6:9e7b4eeac6ec | 98 | private: |
rosienej | 16:84a017ef96f8 | 99 | |
okini3939 | 13:9841af9ac344 | 100 | #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368) || defined(TARGET_LPC4088) |
okini3939 | 8:d4a45bba41d2 | 101 | LPC_UART_TypeDef *_uart; |
okini3939 | 15:4ea4a31c7609 | 102 | #elif defined(TARGET_LPC11UXX) |
okini3939 | 8:d4a45bba41d2 | 103 | LPC_USART_Type *_uart; |
stanly88 | 10:b748aab8404c | 104 | #elif defined(TARGET_LPC11XX) |
stanly88 | 10:b748aab8404c | 105 | LPC_UART_TypeDef *_uart; |
rosienej | 16:84a017ef96f8 | 106 | #elif defined(TARGET_KL46Z) |
rosienej | 18:6303931e4102 | 107 | /** |
rosienej | 18:6303931e4102 | 108 | The UART type changes for the Freescale KL46Z |
rosienej | 18:6303931e4102 | 109 | */ |
rosienej | 16:84a017ef96f8 | 110 | UARTLP_Type *_uart; |
okini3939 | 13:9841af9ac344 | 111 | #else |
rosienej | 18:6303931e4102 | 112 | #error "this CPU not supported." |
okini3939 | 5:72039cd4c874 | 113 | #endif |
okini3939 | 0:cbff6bf41542 | 114 | |
okini3939 | 0:cbff6bf41542 | 115 | }; |
okini3939 | 0:cbff6bf41542 | 116 | |
okini3939 | 0:cbff6bf41542 | 117 | #endif |