RGB_Controller.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "RGB_Controller.h"
  2. void RGB_Response_Func(uint8_t* data);
  3. void RGB_Response_Func(uint8_t* data){
  4. RGB_CMD_T type = data[blucell_type];
  5. #if 0
  6. for(uint8_t i = 0; i < 10; i++){
  7. printf("%02x ",data[i]);
  8. }
  9. #endif
  10. switch(type){
  11. case RGB_Status_Data_Request:
  12. Uart2_Data_Send(data,RGB_SensorDataRequest_Length);
  13. break;
  14. case RGB_ControllerID_SET:
  15. Uart1_Data_Send(data,RGB_ControllerID_SET_Length);
  16. break;
  17. case RGB_SensorID_SET:
  18. Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
  19. break;
  20. case RGB_Status_Data_Response:
  21. Uart1_Data_Send(data,RGB_SensorDataResponse_Length);
  22. break;
  23. case RGB_ControllerLimitSet:
  24. Uart1_Data_Send(data,data[blucell_length] + 3);
  25. Flash_write(&data[0]);
  26. break;
  27. case RGB_Sensor_Start:
  28. case RGB_Sensor_Check:
  29. Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
  30. break;
  31. case RGB_Sensor_Ack:
  32. Uart2_Data_Send(data,data[blucell_length] + 3);
  33. break;
  34. case RGB_Reset:
  35. case RGB_SensorID_SET_Success:
  36. break;
  37. }
  38. }
  39. uint8_t SensorID_Cnt = 0;
  40. uint8_t SensorID_buf[8] = {0,};
  41. uint16_t RGB_SensorRedLimit_Buf[9]={0,};
  42. uint16_t RGB_SensorGreenLimit_Buf[9]={0,};
  43. uint16_t RGB_SensorBlueLimit_Buf[9]={0,};
  44. uint16_t Sensor_red[9] = {0,};
  45. uint16_t Sensor_green[9] = {0,};
  46. uint16_t Sensor_blue[9] = {0,};
  47. void RGB_Alarm_Check(uint8_t* data){
  48. Sensor_red[data[blucell_srcid]] = ((data[blucell_red_H + 2] << 8)| data[blucell_red_L + 2]);
  49. Sensor_green[data[blucell_srcid]] = ((data[blucell_green_H + 2] << 8)| data[blucell_green_L + 2]);
  50. Sensor_blue[data[blucell_srcid]] = ((data[blucell_blue_H + 2] << 8)| data[blucell_blue_L + 2]);
  51. uint8_t LED_Alarm = 0;
  52. for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
  53. if(RGB_SensorRedLimit_Buf[SensorID_buf[i]] >= Sensor_red[SensorID_buf[i]]
  54. || RGB_SensorGreenLimit_Buf[SensorID_buf[i]] >= Sensor_green[SensorID_buf[i]]
  55. || RGB_SensorBlueLimit_Buf[SensorID_buf[i]] >= Sensor_blue[SensorID_buf[i]]) {
  56. LED_Alarm = 1;
  57. break;
  58. }else{
  59. LED_Alarm = 0;
  60. }
  61. }
  62. if(LED_Alarm == 1){
  63. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
  64. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
  65. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET);
  66. }else{
  67. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
  68. HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);
  69. HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_RESET);
  70. }
  71. }
  72. uint8_t RGB_DeviceStatusCheck(void){
  73. uint8_t ret = 0;
  74. for(uint8_t i = 1; i <= SensorID_Cnt; i++){
  75. if(SensorID_buf[i] > 0){
  76. ret += 0x01 << (SensorID_buf[i] - 1);
  77. }
  78. }
  79. return ret;
  80. }
  81. uint8_t datalosscnt[9] = {0,};
  82. void RGB_Controller_Func(uint8_t* data){
  83. RGB_CMD_T type = data[blucell_type];
  84. // static uint8_t temp_sensorid;
  85. uint8_t Result_buf[100] = {0,};
  86. switch(type){
  87. case RGB_Status_Data_Request:
  88. datalosscnt[data[blucell_srcid + 1]]++;
  89. if(datalosscnt[data[blucell_srcid + 1]] > 3 && data[blucell_srcid + 1] != 0){
  90. RGB_SensorIDAutoSet(1);
  91. memset(&SensorID_buf[0],0x00,8);
  92. }
  93. data[5] = STH30_CreateCrc(&data[blucell_type],data[blucell_length]);
  94. memcpy(&Result_buf[blucell_stx],&data[blucell_stx],RGB_SensorDataRequest_Length);
  95. break;
  96. case RGB_ControllerID_SET:
  97. memcpy(&Result_buf[blucell_stx],&data[blucell_stx],data[blucell_length] + 3);
  98. Result_buf[7] = data[blucell_srcid]; // �긽��諛⑹쓽 SRC ID�뒗 �굹�쓽 DST ID�씠�떎.
  99. MyControllerID = Result_buf[7] = data[7];//�긽��諛⑹쓽 DST ID �뒗 �굹�쓽 ID �씠�떎.
  100. break;
  101. case RGB_SensorID_SET:
  102. RGB_SensorIDAutoSet(1);
  103. memcpy(&Result_buf[blucell_stx],&data[blucell_stx],data[blucell_length] + 3);
  104. Result_buf[5] = STH30_CreateCrc(&Result_buf[blucell_type],Result_buf[blucell_length]);
  105. break;
  106. case RGB_SensorID_SET_Success:
  107. SensorID_Cnt++;
  108. SensorID_buf[SensorID_Cnt] = data[blucell_length + 1];
  109. break;
  110. case RGB_Status_Data_Response:
  111. datalosscnt[data[blucell_srcid]] = 0;
  112. data[blucell_length] += 1;// Device On OFF status Send byte
  113. data[blucell_srcid + 9] = RGB_DeviceStatusCheck();// Device On OFF status Send byte
  114. memcpy(&Result_buf[blucell_stx],&data[blucell_stx],data[blucell_length] + 3);
  115. Result_buf[5] = STH30_CreateCrc(&Result_buf[blucell_type],Result_buf[blucell_length]);
  116. RGB_Alarm_Check(&data[blucell_stx]);
  117. break;
  118. case RGB_ControllerLimitSet:
  119. memcpy(&Result_buf[blucell_stx],&data[blucell_stx],data[blucell_length] + 3);
  120. RGB_SensorRedLimit_Buf[data[blucell_dstid]] = ((data[blucell_red_H] << 8) |data[blucell_red_L]);
  121. RGB_SensorGreenLimit_Buf[data[blucell_dstid]] = ((data[blucell_green_H] << 8) |data[blucell_green_L]);
  122. RGB_SensorBlueLimit_Buf[data[blucell_dstid]] = ((data[blucell_blue_H] << 8) |data[blucell_blue_L]);
  123. Result_buf[blucell_crc] = STH30_CreateCrc(&Result_buf[blucell_type],Result_buf[blucell_length]);
  124. break;
  125. case RGB_Reset:
  126. NVIC_SystemReset();
  127. break;
  128. case RGB_ID_Allocate_Request:
  129. break;
  130. default:
  131. break;
  132. }
  133. RGB_Response_Func(&Result_buf[blucell_stx]);
  134. return;
  135. }