DALI send/recv library.
DALI send/recv library
lighting control protocol.
設備照明の調光プロトコル DALI を送受信するライブラリです。
DALI インターフェースの回路図などは次を参照。
- http://ww1.microchip.com/downloads/jp/AppNotes/01465A_JP.pdf
- https://www.mouser.com/pdfdocs/AN11174.pdf
DALI.h@1:319d52b5116b, 2020-07-27 (annotated)
- Committer:
- okini3939
- Date:
- Mon Jul 27 05:53:55 2020 +0000
- Revision:
- 1:319d52b5116b
- Parent:
- 0:6cb7026982fc
bug fix;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:6cb7026982fc | 1 | /* |
okini3939 | 0:6cb7026982fc | 2 | * DALI send/recv library |
okini3939 | 0:6cb7026982fc | 3 | * Copyright (c) 2020 Hiroshi Suga |
okini3939 | 0:6cb7026982fc | 4 | * Released under the MIT License: http://mbed.org/license/mit |
okini3939 | 0:6cb7026982fc | 5 | */ |
okini3939 | 0:6cb7026982fc | 6 | |
okini3939 | 0:6cb7026982fc | 7 | /** @file |
okini3939 | 0:6cb7026982fc | 8 | * @brief DALI send/recv |
okini3939 | 0:6cb7026982fc | 9 | */ |
okini3939 | 0:6cb7026982fc | 10 | |
okini3939 | 0:6cb7026982fc | 11 | #ifndef _DALI_H_ |
okini3939 | 0:6cb7026982fc | 12 | #define _DALI_H_ |
okini3939 | 0:6cb7026982fc | 13 | |
okini3939 | 0:6cb7026982fc | 14 | #include "CBuffer.h" |
okini3939 | 0:6cb7026982fc | 15 | |
okini3939 | 0:6cb7026982fc | 16 | class DALI { |
okini3939 | 0:6cb7026982fc | 17 | public: |
okini3939 | 0:6cb7026982fc | 18 | enum DALI_FRAME { |
okini3939 | 1:319d52b5116b | 19 | FORWARD_SHORT_DAP, // DIRECT ARC POWER |
okini3939 | 1:319d52b5116b | 20 | FORWARD_SHORT_IAP, // COMMAND |
okini3939 | 1:319d52b5116b | 21 | FORWARD_GROUP_DAP, |
okini3939 | 1:319d52b5116b | 22 | FORWARD_GROUP_IAP, |
okini3939 | 1:319d52b5116b | 23 | BACKWARD, |
okini3939 | 1:319d52b5116b | 24 | }; |
okini3939 | 1:319d52b5116b | 25 | |
okini3939 | 1:319d52b5116b | 26 | enum DALI_COMMAND { |
okini3939 | 1:319d52b5116b | 27 | OFF = 0x00, |
okini3939 | 1:319d52b5116b | 28 | UP = 0x01, |
okini3939 | 1:319d52b5116b | 29 | DOWN = 0x02, |
okini3939 | 1:319d52b5116b | 30 | STEP_UP = 0x03, |
okini3939 | 1:319d52b5116b | 31 | STEP_DOWN = 0x04, |
okini3939 | 1:319d52b5116b | 32 | RECALL_MAX_LEVEL = 0x05, |
okini3939 | 1:319d52b5116b | 33 | RECALL_MIN_LEVEL = 0x06, |
okini3939 | 1:319d52b5116b | 34 | STEP_DOWN_AND_OFF = 0x07, |
okini3939 | 1:319d52b5116b | 35 | ON_AND_STEP_UP = 0x08, |
okini3939 | 1:319d52b5116b | 36 | RESET = 0x20, |
okini3939 | 1:319d52b5116b | 37 | QUERY_STATUS = 0x90, |
okini3939 | 0:6cb7026982fc | 38 | }; |
okini3939 | 0:6cb7026982fc | 39 | |
okini3939 | 1:319d52b5116b | 40 | /** init DALI class |
okini3939 | 1:319d52b5116b | 41 | * @param tx TX port |
okini3939 | 1:319d52b5116b | 42 | * @param rx RX port (interrupt) |
okini3939 | 1:319d52b5116b | 43 | */ |
okini3939 | 0:6cb7026982fc | 44 | DALI (PinName tx, PinName rx); |
okini3939 | 0:6cb7026982fc | 45 | |
okini3939 | 1:319d52b5116b | 46 | /** Recv the data |
okini3939 | 1:319d52b5116b | 47 | * @param frame enum DALI_FRAME |
okini3939 | 1:319d52b5116b | 48 | * @param addr DALI address (short:0-63, group:0-15,63 broadcast) |
okini3939 | 1:319d52b5116b | 49 | * @param value DALI value |
okini3939 | 1:319d52b5116b | 50 | */ |
okini3939 | 0:6cb7026982fc | 51 | int read (enum DALI_FRAME *frame, int *addr, int *value); |
okini3939 | 1:319d52b5116b | 52 | |
okini3939 | 0:6cb7026982fc | 53 | int readable (); |
okini3939 | 0:6cb7026982fc | 54 | |
okini3939 | 1:319d52b5116b | 55 | /** Send the data |
okini3939 | 1:319d52b5116b | 56 | * @param frame enum DALI_FRAME |
okini3939 | 1:319d52b5116b | 57 | * @param addr DALI address (short:0-63, group:0-15,63 broadcast) |
okini3939 | 1:319d52b5116b | 58 | * @param value DALI value |
okini3939 | 1:319d52b5116b | 59 | */ |
okini3939 | 0:6cb7026982fc | 60 | int write (enum DALI_FRAME frame, int addr, int value); |
okini3939 | 0:6cb7026982fc | 61 | |
okini3939 | 1:319d52b5116b | 62 | int writable (); |
okini3939 | 1:319d52b5116b | 63 | |
okini3939 | 0:6cb7026982fc | 64 | private: |
okini3939 | 0:6cb7026982fc | 65 | InterruptIn _rx; |
okini3939 | 0:6cb7026982fc | 66 | DigitalOut _tx; |
okini3939 | 0:6cb7026982fc | 67 | Timeout _timer; |
okini3939 | 0:6cb7026982fc | 68 | Ticker _ticker; |
okini3939 | 0:6cb7026982fc | 69 | |
okini3939 | 0:6cb7026982fc | 70 | CircBuffer<int> *recv_buf; |
okini3939 | 0:6cb7026982fc | 71 | CircBuffer<int> *send_buf; |
okini3939 | 0:6cb7026982fc | 72 | |
okini3939 | 1:319d52b5116b | 73 | volatile int mode; |
okini3939 | 0:6cb7026982fc | 74 | int count; |
okini3939 | 0:6cb7026982fc | 75 | int timeflg; |
okini3939 | 0:6cb7026982fc | 76 | int recv_bit; |
okini3939 | 0:6cb7026982fc | 77 | int recv_data; |
okini3939 | 0:6cb7026982fc | 78 | |
okini3939 | 0:6cb7026982fc | 79 | int send_data; |
okini3939 | 0:6cb7026982fc | 80 | int send_bit; |
okini3939 | 0:6cb7026982fc | 81 | int halfbit; |
okini3939 | 1:319d52b5116b | 82 | volatile int busy; |
okini3939 | 0:6cb7026982fc | 83 | |
okini3939 | 0:6cb7026982fc | 84 | void isr_rx (); |
okini3939 | 0:6cb7026982fc | 85 | void isr_timer (); |
okini3939 | 0:6cb7026982fc | 86 | void isr_timeout (); |
okini3939 | 0:6cb7026982fc | 87 | void isr_send (); |
okini3939 | 0:6cb7026982fc | 88 | |
okini3939 | 0:6cb7026982fc | 89 | }; |
okini3939 | 0:6cb7026982fc | 90 | |
okini3939 | 0:6cb7026982fc | 91 | #endif |