DALI send/recv library.

Dependents:   dali_sample

DALI send/recv library

lighting control protocol.

設備照明の調光プロトコル DALI を送受信するライブラリです。

DALI インターフェースの回路図などは次を参照。

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?

UserRevisionLine numberNew 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