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
CBuffer.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 | /* Copyright (C) 2012 mbed.org, MIT License |
okini3939 | 0:6cb7026982fc | 2 | * |
okini3939 | 0:6cb7026982fc | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
okini3939 | 0:6cb7026982fc | 4 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
okini3939 | 0:6cb7026982fc | 5 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
okini3939 | 0:6cb7026982fc | 6 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
okini3939 | 0:6cb7026982fc | 7 | * furnished to do so, subject to the following conditions: |
okini3939 | 0:6cb7026982fc | 8 | * |
okini3939 | 0:6cb7026982fc | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
okini3939 | 0:6cb7026982fc | 10 | * substantial portions of the Software. |
okini3939 | 0:6cb7026982fc | 11 | * |
okini3939 | 0:6cb7026982fc | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
okini3939 | 0:6cb7026982fc | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
okini3939 | 0:6cb7026982fc | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
okini3939 | 0:6cb7026982fc | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
okini3939 | 0:6cb7026982fc | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
okini3939 | 0:6cb7026982fc | 17 | */ |
okini3939 | 0:6cb7026982fc | 18 | |
okini3939 | 0:6cb7026982fc | 19 | #ifndef CIRCBUFFER_H_ |
okini3939 | 0:6cb7026982fc | 20 | #define CIRCBUFFER_H_ |
okini3939 | 0:6cb7026982fc | 21 | |
okini3939 | 0:6cb7026982fc | 22 | template <class T> |
okini3939 | 0:6cb7026982fc | 23 | class CircBuffer { |
okini3939 | 0:6cb7026982fc | 24 | public: |
okini3939 | 0:6cb7026982fc | 25 | CircBuffer(int length, void *addr = NULL) { |
okini3939 | 0:6cb7026982fc | 26 | write = 0; |
okini3939 | 0:6cb7026982fc | 27 | read = 0; |
okini3939 | 0:6cb7026982fc | 28 | size = length + 1; |
okini3939 | 0:6cb7026982fc | 29 | if (addr) { |
okini3939 | 0:6cb7026982fc | 30 | buf = (T *)addr; |
okini3939 | 0:6cb7026982fc | 31 | } else { |
okini3939 | 0:6cb7026982fc | 32 | buf = (T *)malloc(size * sizeof(T)); |
okini3939 | 0:6cb7026982fc | 33 | } |
okini3939 | 0:6cb7026982fc | 34 | if (buf == NULL) |
okini3939 | 0:6cb7026982fc | 35 | error("Can't allocate memory"); |
okini3939 | 0:6cb7026982fc | 36 | }; |
okini3939 | 0:6cb7026982fc | 37 | |
okini3939 | 0:6cb7026982fc | 38 | bool isFull() { |
okini3939 | 0:6cb7026982fc | 39 | return (((write + 1) % size) == read); |
okini3939 | 0:6cb7026982fc | 40 | }; |
okini3939 | 0:6cb7026982fc | 41 | |
okini3939 | 0:6cb7026982fc | 42 | bool isEmpty() { |
okini3939 | 0:6cb7026982fc | 43 | return (read == write); |
okini3939 | 0:6cb7026982fc | 44 | }; |
okini3939 | 0:6cb7026982fc | 45 | |
okini3939 | 0:6cb7026982fc | 46 | bool queue(T k) { |
okini3939 | 0:6cb7026982fc | 47 | if (isFull()) { |
okini3939 | 0:6cb7026982fc | 48 | return false; |
okini3939 | 0:6cb7026982fc | 49 | } |
okini3939 | 0:6cb7026982fc | 50 | buf[write++] = k; |
okini3939 | 0:6cb7026982fc | 51 | write %= size; |
okini3939 | 0:6cb7026982fc | 52 | return true; |
okini3939 | 0:6cb7026982fc | 53 | } |
okini3939 | 0:6cb7026982fc | 54 | int queue(T *k, int size) { |
okini3939 | 0:6cb7026982fc | 55 | int i; |
okini3939 | 0:6cb7026982fc | 56 | for (i = 0; i < size; i ++) { |
okini3939 | 0:6cb7026982fc | 57 | if (queue(k[i]) == false) break; |
okini3939 | 0:6cb7026982fc | 58 | } |
okini3939 | 0:6cb7026982fc | 59 | return i; |
okini3939 | 0:6cb7026982fc | 60 | } |
okini3939 | 0:6cb7026982fc | 61 | |
okini3939 | 0:6cb7026982fc | 62 | void flush() { |
okini3939 | 0:6cb7026982fc | 63 | read = 0; |
okini3939 | 0:6cb7026982fc | 64 | write = 0; |
okini3939 | 0:6cb7026982fc | 65 | } |
okini3939 | 0:6cb7026982fc | 66 | |
okini3939 | 0:6cb7026982fc | 67 | |
okini3939 | 0:6cb7026982fc | 68 | uint32_t available() { |
okini3939 | 0:6cb7026982fc | 69 | return (write >= read) ? write - read : size - read + write; |
okini3939 | 0:6cb7026982fc | 70 | }; |
okini3939 | 0:6cb7026982fc | 71 | uint32_t free() { |
okini3939 | 0:6cb7026982fc | 72 | return size - available() - 1; |
okini3939 | 0:6cb7026982fc | 73 | }; |
okini3939 | 0:6cb7026982fc | 74 | |
okini3939 | 0:6cb7026982fc | 75 | bool dequeue(T * c) { |
okini3939 | 0:6cb7026982fc | 76 | bool empty = isEmpty(); |
okini3939 | 0:6cb7026982fc | 77 | if (!empty) { |
okini3939 | 0:6cb7026982fc | 78 | *c = buf[read++]; |
okini3939 | 0:6cb7026982fc | 79 | read %= size; |
okini3939 | 0:6cb7026982fc | 80 | } |
okini3939 | 0:6cb7026982fc | 81 | return(!empty); |
okini3939 | 0:6cb7026982fc | 82 | }; |
okini3939 | 0:6cb7026982fc | 83 | int dequeue(T * c, int size) { |
okini3939 | 0:6cb7026982fc | 84 | int i; |
okini3939 | 0:6cb7026982fc | 85 | for (i = 0; i < size; i ++) { |
okini3939 | 0:6cb7026982fc | 86 | if (dequeue(&c[i]) == false) break; |
okini3939 | 0:6cb7026982fc | 87 | } |
okini3939 | 0:6cb7026982fc | 88 | return i; |
okini3939 | 0:6cb7026982fc | 89 | } |
okini3939 | 0:6cb7026982fc | 90 | |
okini3939 | 0:6cb7026982fc | 91 | private: |
okini3939 | 0:6cb7026982fc | 92 | volatile uint32_t write; |
okini3939 | 0:6cb7026982fc | 93 | volatile uint32_t read; |
okini3939 | 0:6cb7026982fc | 94 | uint32_t size; |
okini3939 | 0:6cb7026982fc | 95 | T * buf; |
okini3939 | 0:6cb7026982fc | 96 | }; |
okini3939 | 0:6cb7026982fc | 97 | |
okini3939 | 0:6cb7026982fc | 98 | #endif |