123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #include "RGB_Controller.h"
-
- void RGB_Response_Func(uint8_t* data);
- uint8_t RGB_BufCal(uint8_t srcid);
-
-
-
- void RGB_Response_Func(uint8_t* data){
- RGB_CMD_T type = data[bluecell_type];
- #if 0
- for(uint8_t i = 0; i < 10; i++){
- printf("%02x ",data[i]);
- }
- #endif
- switch(type){
- case RGB_Status_Data_Request:
- Uart2_Data_Send(data,RGB_SensorDataRequest_Length);
- break;
- case RGB_ControllerID_SET:
- Uart1_Data_Send(data,RGB_ControllerID_SET_Length);
- break;
- case RGB_SensorID_SET:
- Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
- break;
- case RGB_Status_Data_Response:
- Uart1_Data_Send(data,RGB_SensorDataResponse_Length);
- break;
- case RGB_ControllerLimitSet:
- Uart1_Data_Send(data,data[bluecell_length] + 3);
- Flash_write(&data[0]);
- break;
- case RGB_Sensor_Start:
- case RGB_Sensor_Check:
- Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
- break;
- case RGB_Sensor_Ack:
- Uart2_Data_Send(data,data[bluecell_length] + 3);
- break;
- case RGB_Reset:
- case RGB_SensorID_SET_Success:
- break;
-
- }
-
- }
- uint8_t SensorID_Cnt = 0;
- uint8_t SensorID_buf[8] = {0,};
- uint16_t RGB_SensorRedLimit_Buf[9]={0,};
- uint16_t RGB_SensorGreenLimit_Buf[9]={0,};
- uint16_t RGB_SensorBlueLimit_Buf[9]={0,};
-
-
- uint16_t Sensor_red[9] = {0,};
- uint16_t Sensor_green[9] = {0,};
- uint16_t Sensor_blue[9] = {0,};
- void RGB_Alarm_Check(uint8_t* data){
-
- Sensor_red[data[bluecell_srcid]] = ((data[bluecell_red_H + 2] << 8)| data[bluecell_red_L + 2]);
- Sensor_green[data[bluecell_srcid]] = ((data[bluecell_green_H + 2] << 8)| data[bluecell_green_L + 2]);
- Sensor_blue[data[bluecell_srcid]] = ((data[bluecell_blue_H + 2] << 8)| data[bluecell_blue_L + 2]);
-
- uint8_t LED_Alarm = 0;
- for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
- if(RGB_SensorRedLimit_Buf[SensorID_buf[i]] >= Sensor_red[SensorID_buf[i]]
- || RGB_SensorGreenLimit_Buf[SensorID_buf[i]] >= Sensor_green[SensorID_buf[i]]
- || RGB_SensorBlueLimit_Buf[SensorID_buf[i]] >= Sensor_blue[SensorID_buf[i]]) {
- LED_Alarm = 1;
- break;
- }else{
- LED_Alarm = 0;
- }
- }
- if(LED_Alarm == 1){
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_SET);
- }else{
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOA, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOC, GPIO_PIN_10, GPIO_PIN_RESET);
- }
- }
-
- uint8_t RGB_DeviceStatusCheck(void){
- uint8_t ret = 0;
- for(uint8_t i = 1; i <= SensorID_Cnt; i++){
- if(SensorID_buf[i] > 0){
- ret += 0x01 << (SensorID_buf[i] - 1);
- }
- }
- return ret;
- }
- uint8_t Lora_Buf[100] = {0,};
-
- void RGB_Data_Stack(uint8_t* rgb_buf){
- uint8_t mynumcnt = RGB_BufCal(rgb_buf[bluecell_srcid]);
- Lora_Buf[bluecell_stx] = 0xbe;
- Lora_Buf[bluecell_type] = RGB_Lora_Data_Report;
- Lora_Buf[bluecell_length] = Lora_Max_Amount + 2; //length 1byte + type 1byte + RGB Data 60byte
- Lora_Buf[bluecell_srcid] = MyControllerID;
- Lora_Buf[mynumcnt] = rgb_buf[bluecell_srcid];
- Lora_Buf[mynumcnt + 1] = rgb_buf[bluecell_red_H + 2];
- Lora_Buf[mynumcnt + 2] = rgb_buf[bluecell_red_L + 2];
- Lora_Buf[mynumcnt + 3] = rgb_buf[bluecell_green_H + 2];
- Lora_Buf[mynumcnt + 4] = rgb_buf[bluecell_green_L + 2];
- Lora_Buf[mynumcnt + 5] = rgb_buf[bluecell_blue_H + 2];
- Lora_Buf[mynumcnt + 6] = rgb_buf[bluecell_blue_L + 2];
- LoraDataSendSet(1);
- }
-
- uint8_t RGB_BufCal(uint8_t srcid){
- uint8_t ret = 0;
- switch(srcid){
- case 1:ret = 4;break;
- case 2:ret = 11;break;
- case 3:ret = 18;break;
- case 4:ret = 25;break;
- case 5:ret = 32;break;
- case 6:ret = 39;break;
- case 7:ret = 46;break;
- case 8:ret = 53;break;
- }
- return ret;
- }
- uint8_t datalosscnt[9] = {0,};
- void RGB_Controller_Func(uint8_t* data){
- RGB_CMD_T type = data[bluecell_type];
- // static uint8_t temp_sensorid;
- uint8_t Result_buf[100] = {0,};
- switch(type){
- case RGB_Status_Data_Request:
- datalosscnt[data[bluecell_srcid + 1]]++;
- if(datalosscnt[data[bluecell_srcid + 1]] > 3 && data[bluecell_srcid + 1] != 0){
- RGB_SensorIDAutoSet(1);
- memset(&SensorID_buf[0],0x00,8);
- }
- data[5] = STH30_CreateCrc(&data[bluecell_type],data[bluecell_length]);
- memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],RGB_SensorDataRequest_Length);
- break;
- case RGB_ControllerID_SET:
- memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
- Result_buf[7] = data[bluecell_srcid]; // �긽��諛⑹쓽 SRC ID�뒗 �굹�쓽 DST ID�씠�떎.
- MyControllerID = Result_buf[7] = data[7];//�긽��諛⑹쓽 DST ID �뒗 �굹�쓽 ID �씠�떎.
- break;
- case RGB_SensorID_SET:
- RGB_SensorIDAutoSet(1);
- memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
- Result_buf[5] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
- break;
- case RGB_SensorID_SET_Success:
- SensorID_Cnt++;
- SensorID_buf[SensorID_Cnt] = data[bluecell_length + 1];
- break;
- case RGB_Status_Data_Response:
- datalosscnt[data[bluecell_srcid]] = 0;
- RGB_Data_Stack(&data[0]);
- data[bluecell_length] += 1;// Device On OFF status Send byte
- data[bluecell_srcid + 9] = RGB_DeviceStatusCheck();// Device On OFF status Send byte
- memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
- Result_buf[5] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
- RGB_Alarm_Check(&data[bluecell_stx]);
- break;
- case RGB_ControllerLimitSet:
- memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
- RGB_SensorRedLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_red_H] << 8) |data[bluecell_red_L]);
- RGB_SensorGreenLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_green_H] << 8) |data[bluecell_green_L]);
- RGB_SensorBlueLimit_Buf[data[bluecell_dstid]] = ((data[bluecell_blue_H] << 8) |data[bluecell_blue_L]);
- Result_buf[bluecell_crc] = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
- break;
- case RGB_Reset:
- NVIC_SystemReset();
- break;
- case RGB_ID_Allocate_Request:
-
- break;
- default:
- break;
- }
-
- RGB_Response_Func(&Result_buf[bluecell_stx]);
- return;
- }
-
|