Subversion Repositories LedShow

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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