RGB_Controller.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. #include "RGB_Controller.h"
  2. void RGB_Response_Func(uint8_t* data);
  3. uint8_t RGB_BufCal(uint8_t srcid);
  4. void RGB_Response_Func(uint8_t* data){
  5. RGB_CMD_T type = data[bluecell_type];
  6. #if 0
  7. for(uint8_t i = 0; i < 10; i++){
  8. printf("%02x ",data[i]);
  9. }
  10. #endif
  11. switch(type){
  12. case RGB_Status_Data_Request:
  13. Uart2_Data_Send(data,RGB_SensorDataRequest_Length);
  14. break;
  15. case RGB_ControllerID_SET:
  16. Uart1_Data_Send(data,RGB_ControllerID_SET_Length);
  17. break;
  18. case RGB_SensorID_SET:
  19. Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
  20. break;
  21. case RGB_Status_Data_Response:
  22. Uart1_Data_Send(data,RGB_SensorDataResponse_Length);
  23. break;
  24. case RGB_ControllerLimitSet:
  25. Uart1_Data_Send(data,data[bluecell_length] + 3);
  26. Flash_write(&data[0]);
  27. break;
  28. case RGB_Sensor_Start:
  29. case RGB_Sensor_Check:
  30. Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
  31. break;
  32. case RGB_Sensor_Ack:
  33. Uart2_Data_Send(data,data[bluecell_length] + 3);
  34. break;
  35. case RGB_Reset:
  36. case RGB_SensorID_SET_Success:
  37. break;
  38. }
  39. }
  40. uint8_t SensorID_Cnt = 0;
  41. uint8_t SensorID_buf[8] = {0,};
  42. uint16_t RGB_SensorRedLimit_Buf[9]={0,};
  43. uint16_t RGB_SensorGreenLimit_Buf[9]={0,};
  44. uint16_t RGB_SensorBlueLimit_Buf[9]={0,};
  45. uint16_t Sensor_red[9] = {0,};
  46. uint16_t Sensor_green[9] = {0,};
  47. uint16_t Sensor_blue[9] = {0,};
  48. void RGB_Alarm_Check(uint8_t* data){
  49. Sensor_red[data[bluecell_srcid]] = ((data[bluecell_red_H + 2] << 8)| data[bluecell_red_L + 2]);
  50. Sensor_green[data[bluecell_srcid]] = ((data[bluecell_green_H + 2] << 8)| data[bluecell_green_L + 2]);
  51. Sensor_blue[data[bluecell_srcid]] = ((data[bluecell_blue_H + 2] << 8)| data[bluecell_blue_L + 2]);
  52. uint8_t LED_Alarm = 0;
  53. for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
  54. if(RGB_SensorRedLimit_Buf[SensorID_buf[i]] >= Sensor_red[SensorID_buf[i]]
  55. || RGB_SensorGreenLimit_Buf[SensorID_buf[i]] >= Sensor_green[SensorID_buf[i]]
  56. || RGB_SensorBlueLimit_Buf[SensorID_buf[i]] >= Sensor_blue[SensorID_buf[i]]) {
  57. LED_Alarm = 1;
  58. break;
  59. }else{
  60. LED_Alarm = 0;
  61. }
  62. }
  63. if(LED_Alarm == 1){
  64. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
  65. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
  66. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET);
  67. }else{
  68. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
  69. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);
  70. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_RESET);
  71. }
  72. }
  73. uint8_t RGB_DeviceStatusCheck(void){
  74. uint8_t ret = 0;
  75. for(uint8_t i = 1; i <= SensorID_Cnt; i++){
  76. if(SensorID_buf[i] > 0){
  77. ret += 0x01 << (SensorID_buf[i] - 1);
  78. }
  79. }
  80. return ret;
  81. }
  82. uint8_t Lora_Buf[100] = {0,};
  83. void RGB_Data_Stack(uint8_t* rgb_buf){
  84. uint8_t mynumcnt = RGB_BufCal(rgb_buf[bluecell_srcid]);
  85. Lora_Buf[bluecell_stx] = 0xbe;
  86. Lora_Buf[bluecell_type] = RGB_Lora_Data_Report;
  87. Lora_Buf[bluecell_length] = Lora_Max_Amount + 2; //length 1byte + type 1byte + RGB Data 60byte
  88. Lora_Buf[bluecell_srcid] = MyControllerID;
  89. Lora_Buf[mynumcnt] = rgb_buf[bluecell_srcid];
  90. Lora_Buf[mynumcnt + 1] = rgb_buf[bluecell_red_H + 2];
  91. Lora_Buf[mynumcnt + 2] = rgb_buf[bluecell_red_L + 2];
  92. Lora_Buf[mynumcnt + 3] = rgb_buf[bluecell_green_H + 2];
  93. Lora_Buf[mynumcnt + 4] = rgb_buf[bluecell_green_L + 2];
  94. Lora_Buf[mynumcnt + 5] = rgb_buf[bluecell_blue_H + 2];
  95. Lora_Buf[mynumcnt + 6] = rgb_buf[bluecell_blue_L + 2];
  96. LoraDataSendSet(1);
  97. }
  98. uint8_t RGB_BufCal(uint8_t srcid){
  99. uint8_t ret = 0;
  100. switch(srcid){
  101. case 1:ret = 4;break;
  102. case 2:ret = 11;break;
  103. case 3:ret = 18;break;
  104. case 4:ret = 25;break;
  105. case 5:ret = 32;break;
  106. case 6:ret = 39;break;
  107. case 7:ret = 46;break;
  108. case 8:ret = 53;break;
  109. }
  110. return ret;
  111. }
  112. uint8_t datalosscnt[9] = {0,};
  113. void RGB_Controller_Func(uint8_t* data){
  114. RGB_CMD_T type = data[bluecell_type];
  115. // static uint8_t temp_sensorid;
  116. uint8_t Result_buf[100] = {0,};
  117. switch(type){
  118. case RGB_Status_Data_Request:
  119. datalosscnt[data[bluecell_srcid + 1]]++;
  120. if(datalosscnt[data[bluecell_srcid + 1]] > 3 && data[bluecell_srcid + 1] != 0){
  121. RGB_SensorIDAutoSet(1);
  122. memset(&SensorID_buf[0],0x00,8);
  123. }
  124. data[5] = STH30_CreateCrc(&data[bluecell_type],data[bluecell_length]);
  125. memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],RGB_SensorDataRequest_Length);
  126. break;
  127. case RGB_ControllerID_SET:
  128. memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
  129. Result_buf[7] = data[bluecell_srcid]; // �긽��諛⑹쓽 SRC ID�뒗 �굹�쓽 DST ID�씠�떎.
  130. MyControllerID = Result_buf[7] = data[7];//�긽��諛⑹쓽 DST ID �뒗 �굹�쓽 ID �씠�떎.
  131. break;
  132. case RGB_SensorID_SET:
  133. RGB_SensorIDAutoSet(1);
  134. memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
  135. Result_buf[5] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
  136. break;
  137. case RGB_SensorID_SET_Success:
  138. SensorID_Cnt++;
  139. SensorID_buf[SensorID_Cnt] = data[bluecell_length + 1];
  140. break;
  141. case RGB_Status_Data_Response:
  142. datalosscnt[data[bluecell_srcid]] = 0;
  143. RGB_Data_Stack(&data[0]);
  144. data[bluecell_length] += 1;// Device On OFF status Send byte
  145. data[bluecell_srcid + 9] = RGB_DeviceStatusCheck();// Device On OFF status Send byte
  146. memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
  147. Result_buf[5] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
  148. RGB_Alarm_Check(&data[bluecell_stx]);
  149. break;
  150. case RGB_ControllerLimitSet:
  151. memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
  152. RGB_SensorRedLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_red_H] << 8) |data[bluecell_red_L]);
  153. RGB_SensorGreenLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_green_H] << 8) |data[bluecell_green_L]);
  154. RGB_SensorBlueLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_blue_H] << 8) |data[bluecell_blue_L]);
  155. Result_buf[bluecell_crc] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
  156. break;
  157. case RGB_Reset:
  158. NVIC_SystemReset();
  159. break;
  160. case RGB_ID_Allocate_Request:
  161. break;
  162. default:
  163. break;
  164. }
  165. RGB_Response_Func(&Result_buf[bluecell_stx]);
  166. return;
  167. }