Rev 6 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6 | mjames | 1 | /* |
2 | * dmx.c |
||
3 | * |
||
4 | * Created on: 26 Jul 2019 |
||
5 | * Author: Mike |
||
6 | */ |
||
7 | |||
7 | mjames | 8 | #include "stdint.h" |
9 | #include "string.h" |
||
10 | #include "dmx.h" |
||
6 | mjames | 11 | |
12 | |||
13 | // DMX state variables |
||
14 | DMX_State_t DMX_State = DMX_IDLE; |
||
15 | uint8_t DMX_Buffer[512]; |
||
16 | uint32_t DMX_Pointer; |
||
17 | |||
7 | mjames | 18 | void dmx_handle_state(uint8_t* Buf, uint32_t *Len) |
6 | mjames | 19 | { |
20 | switch (DMX_State) |
||
21 | { |
||
22 | case DMX_IDLE: // nothing happening |
||
23 | break; |
||
24 | case DMX_BREAK:// |
||
25 | if(*Len > 0) |
||
26 | { |
||
27 | if( Buf[0] != 0) |
||
28 | DMX_State = DMX_IDLE; |
||
29 | else |
||
30 | { |
||
31 | memcpy(DMX_Buffer,Buf+1,*Len-1); |
||
32 | DMX_Pointer = *Len-1; |
||
33 | DMX_State = DMX_BYTES; |
||
34 | } |
||
35 | } |
||
36 | break; |
||
37 | case DMX_BYTES: |
||
38 | { |
||
39 | int count = *Len; |
||
40 | int newPointer = DMX_Pointer + count; |
||
41 | if(newPointer >= 512) |
||
42 | count = 512-count; |
||
43 | |||
44 | memcpy(DMX_Buffer+ DMX_Pointer, Buf, count); |
||
45 | DMX_Pointer += count; |
||
46 | if (DMX_Pointer == 512) |
||
47 | { |
||
48 | DMX_State = DMX_DATA; |
||
49 | } |
||
50 | } |
||
51 | break; |
||
52 | case DMX_DATA: |
||
53 | case DMX_DONE: |
||
54 | break; |
||
55 | } |
||
7 | mjames | 56 | } |
6 | mjames | 57 |