Browse Source

RGB Data Alarm 값 Controller 에서 올릴 수 있도록 프로토콜 변경

Lora Tx/Rx Ver.0.1
june9152 6 years ago
parent
commit
71384b15f1

BIN
Debug/STM32F103_RGB_Controller.bin


BIN
Debug/STM32F103_RGB_Controller.binary


BIN
Debug/STM32F103_RGB_Controller.elf


File diff suppressed because it is too large
+ 4536 - 4500
Debug/STM32F103_RGB_Controller.list


File diff suppressed because it is too large
+ 477 - 474
Debug/STM32F103_RGB_Controller.map


BIN
Debug/Src/RGB_Controller.o


+ 3 - 3
Debug/Src/RGB_Controller.su

@@ -6,8 +6,8 @@ RGB_Controller.c:134:6:RGB_Sensor_LED_Alarm_ON	8	static
6
 RGB_Controller.c:172:6:RGB_Sensor_LED_Alarm_OFF	8	static
6
 RGB_Controller.c:172:6:RGB_Sensor_LED_Alarm_OFF	8	static
7
 RGB_Controller.c:211:6:RGB_Alarm_Operate	32	static
7
 RGB_Controller.c:211:6:RGB_Alarm_Operate	32	static
8
 RGB_Controller.c:254:9:RGB_DeviceStatusCheck	12	static
8
 RGB_Controller.c:254:9:RGB_DeviceStatusCheck	12	static
9
-RGB_Controller.c:328:9:RGB_BufCal	0	static
9
+RGB_Controller.c:327:9:RGB_BufCal	0	static
10
 RGB_Controller.c:301:6:RGB_Data_Stack	24	static
10
 RGB_Controller.c:301:6:RGB_Data_Stack	24	static
11
 RGB_Controller.c:227:6:RGB_Alarm_Check	104	static
11
 RGB_Controller.c:227:6:RGB_Alarm_Check	104	static
12
-RGB_Controller.c:342:9:RGB_LimitData_Get	0	static
13
-RGB_Controller.c:353:6:RGB_Controller_Func	120	static
12
+RGB_Controller.c:341:9:RGB_LimitData_Get	0	static
13
+RGB_Controller.c:352:6:RGB_Controller_Func	120	static

BIN
Debug/Src/main.o


+ 20 - 20
Debug/Src/main.su

@@ -1,20 +1,20 @@
1
-main.c:131:6:HAL_UART_RxCpltCallback	8	static
2
-main.c:176:6:HAL_TIM_PeriodElapsedCallback	0	static
3
-main.c:185:6:LoraDataSendSet	0	static
4
-main.c:188:9:LoraDataSendGet	0	static
5
-main.c:192:6:UartDataRecvSet	0	static
6
-main.c:195:9:UartDataRecvGet	0	static
7
-main.c:198:6:RGB_SensorIDAutoSet	0	static
8
-main.c:201:9:RGB_SensorIDAutoGet	0	static
9
-main.c:205:6:Uart2_Data_Send	0	static
10
-main.c:208:6:Uart1_Data_Send	0	static
11
-main.c:212:5:_write	8	static
12
-main.c:248:6:Uart_dataCheck	24	static
13
-main.c:280:6:RGB_Sensor_PowerOnOff	8	static
14
-main.c:434:6:test_read	24	static
15
-main.c:453:6:Flash_RGB_Data_Write	16	static
16
-main.c:466:6:Flash_write	24	static
17
-main.c:519:6:Flash_InitRead	12	static
18
-main.c:751:6:SystemClock_Config	72	static
19
-main.c:557:5:main	296	static
20
-main.c:1025:6:Error_Handler	0	static
1
+main.c:137:6:HAL_UART_RxCpltCallback	8	static
2
+main.c:182:6:HAL_TIM_PeriodElapsedCallback	0	static
3
+main.c:192:6:LoraDataSendSet	0	static
4
+main.c:195:9:LoraDataSendGet	0	static
5
+main.c:199:6:UartDataRecvSet	0	static
6
+main.c:202:9:UartDataRecvGet	0	static
7
+main.c:205:6:RGB_SensorIDAutoSet	0	static
8
+main.c:208:9:RGB_SensorIDAutoGet	0	static
9
+main.c:212:6:Uart2_Data_Send	0	static
10
+main.c:215:6:Uart1_Data_Send	0	static
11
+main.c:219:5:_write	8	static
12
+main.c:255:6:Uart_dataCheck	24	static
13
+main.c:287:6:RGB_Sensor_PowerOnOff	8	static
14
+main.c:441:6:test_read	24	static
15
+main.c:460:6:Flash_RGB_Data_Write	16	static
16
+main.c:473:6:Flash_write	24	static
17
+main.c:526:6:Flash_InitRead	12	static
18
+main.c:757:6:SystemClock_Config	72	static
19
+main.c:564:5:main	296	static
20
+main.c:1031:6:Error_Handler	0	static

+ 5 - 1
Inc/main.h

@@ -134,7 +134,12 @@ typedef enum{
134
     RGB_ControllerID_GET,           //16
134
     RGB_ControllerID_GET,           //16
135
     RGB_Controller_Update_Ack,      //17
135
     RGB_Controller_Update_Ack,      //17
136
     RGB_ControllerLimitGet ,        //18    
136
     RGB_ControllerLimitGet ,        //18    
137
+    RGB_Lora_Init_Request,
138
+    RGB_Lora_Init_Response,
139
+    RGB_Lora_DataRequest,
140
+    RGB_Lora_DataResponse,
137
 }RGB_CMD_T;
141
 }RGB_CMD_T;
142
+
138
 #define     RGB_ControllerID_SET_Length         10 
143
 #define     RGB_ControllerID_SET_Length         10 
139
 #define     RGB_SensorID_SET_Length             10 
144
 #define     RGB_SensorID_SET_Length             10 
140
 #define     RGB_SensorDataRequest_Length        7
145
 #define     RGB_SensorDataRequest_Length        7
@@ -142,7 +147,6 @@ typedef enum{
142
 #define     RGB_SensorIDCheckSetRequest_Length  4
147
 #define     RGB_SensorIDCheckSetRequest_Length  4
143
 
148
 
144
 
149
 
145
-#define     RGB_SensorDataResponse_Length       15
146
 #define     RGB_SensorDataResponseData_Length   RGB_SensorDataResponse_Length - 3
150
 #define     RGB_SensorDataResponseData_Length   RGB_SensorDataResponse_Length - 3
147
 #define     Lora_Max_Amount                     5
151
 #define     Lora_Max_Amount                     5
148
 #define     LORA_MAX_DATA_CNT                   Lora_Max_Amount + 3
152
 #define     LORA_MAX_DATA_CNT                   Lora_Max_Amount + 3

+ 19 - 15
Src/RGB_Controller.c

@@ -90,7 +90,7 @@ for(uint8_t i = 0; i < 10; i++){
90
             Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
90
             Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
91
             break;        
91
             break;        
92
         case RGB_Status_Data_Response:
92
         case RGB_Status_Data_Response:
93
-            Uart1_Data_Send(data,RGB_SensorDataResponse_Length);
93
+            Uart1_Data_Send(data,data[bluecell_length] + 3);
94
             break;
94
             break;
95
         case RGB_ControllerLimitSet:
95
         case RGB_ControllerLimitSet:
96
             Uart1_Data_Send(data,data[bluecell_length] + 3);
96
             Uart1_Data_Send(data,data[bluecell_length] + 3);
@@ -211,15 +211,15 @@ void RGB_Alarm_Operate(void){
211
     uint8_t temp_warning = 0;
211
     uint8_t temp_warning = 0;
212
     for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
212
     for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
213
         if(LED_Alarm[SensorID_buf[i]] == 1){
213
         if(LED_Alarm[SensorID_buf[i]] == 1){
214
-            HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_SET); //표지 LED  
214
+            HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_SET); //표지 LED
215
             RGB_Sensor_LED_Alarm_ON(SensorID_buf[i]);
215
             RGB_Sensor_LED_Alarm_ON(SensorID_buf[i]);
216
             temp_warning = 1; 
216
             temp_warning = 1; 
217
         }else{
217
         }else{
218
             RGB_Sensor_LED_Alarm_OFF(SensorID_buf[i]);
218
             RGB_Sensor_LED_Alarm_OFF(SensorID_buf[i]);
219
         }
219
         }
220
     }
220
     }
221
-    if(temp_warning == 0){ // 8개의 Sensor가 전부 정상일 때 만 동작 
222
-        HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_RESET); //표지 LED 
221
+    if(temp_warning == 0){ // 8개의 Sensor가 전부 정상일 때 만 동작
222
+        HAL_GPIO_WritePin(LED_ALARM_GPIO_Port, LED_ALARM_Pin, GPIO_PIN_RESET); //표지 LED
223
         RGB_Sensor_LED_Alarm_OFF(0); //모든 Sensor가 정상일 때는 LED 가 켜지지 않는다.
223
         RGB_Sensor_LED_Alarm_OFF(0); //모든 Sensor가 정상일 때는 LED 가 켜지지 않는다.
224
     }
224
     }
225
 }
225
 }
@@ -245,7 +245,7 @@ void RGB_Alarm_Check(uint8_t* data){
245
     }
245
     }
246
     RGB_Data_Stack(&LED_Alarm[1]);
246
     RGB_Data_Stack(&LED_Alarm[1]);
247
     if(Prev_Alarm_occur != Alarm_occur){
247
     if(Prev_Alarm_occur != Alarm_occur){
248
-         LoraDataSendSet(1);
248
+//         LoraDataSendSet(1);
249
          Prev_Alarm_occur = Alarm_occur;
249
          Prev_Alarm_occur = Alarm_occur;
250
     }
250
     }
251
 }
251
 }
@@ -295,19 +295,18 @@ uint8_t RGB_BufCal(uint8_t srcid){
295
 #else //Uart Flag Data
295
 #else //Uart Flag Data
296
 /*
296
 /*
297
     현재 Controller 가지고 있는 RGB Sensor ID Check
297
     현재 Controller 가지고 있는 RGB Sensor ID Check
298
-    현재 비정상적인 동작을 하는 Sensor 에대한 Flag 정보 
298
+    현재 비정상적인 동작을 하는 Sensor 에대한 Flag 정보
299
 */
299
 */
300
 void RGB_Data_Stack(uint8_t* rgb_buf){
300
 void RGB_Data_Stack(uint8_t* rgb_buf){
301
     memset(&Lora_Buf[0],0x00,8);
301
     memset(&Lora_Buf[0],0x00,8);
302
     /*********************FIX DATA*************************************/
302
     /*********************FIX DATA*************************************/
303
     Lora_Buf[bluecell_stx]         = 0xbe;
303
     Lora_Buf[bluecell_stx]         = 0xbe;
304
     Lora_Buf[bluecell_srcid + 4]   = 0xeb;
304
     Lora_Buf[bluecell_srcid + 4]   = 0xeb;
305
-    
306
     Lora_Buf[bluecell_type]        = RGB_Lora_Data_Report;
305
     Lora_Buf[bluecell_type]        = RGB_Lora_Data_Report;
307
     Lora_Buf[bluecell_length]      = Lora_Max_Amount;// RGB Data 5byte
306
     Lora_Buf[bluecell_length]      = Lora_Max_Amount;// RGB Data 5byte
308
     Lora_Buf[bluecell_srcid]       = MyControllerID;
307
     Lora_Buf[bluecell_srcid]       = MyControllerID;
309
     /*********************FIX DATA*************************************/
308
     /*********************FIX DATA*************************************/
310
-    if(RGB_BufCal(SensorID_buf[1]) == 0){//아무런 Device가 존재 하지않을 때 
309
+    if(RGB_BufCal(SensorID_buf[1]) == 0){//아무런 Device가 존재 하지않을 때
311
         printf("Not Exist Device \n");
310
         printf("Not Exist Device \n");
312
         return;
311
         return;
313
     }
312
     }
@@ -321,8 +320,8 @@ void RGB_Data_Stack(uint8_t* rgb_buf){
321
    
320
    
322
 }
321
 }
323
 /*
322
 /*
324
-    RGB_Data_Stack에 Lora에 Data를 보내기 위해 Buffer에 Data를 쌓을 때 
325
-    ID 마다 Location Cnt 
323
+    RGB_Data_Stack에 Lora에 Data를 보내기 위해 Buffer에 Data를 쌓을 때
324
+    ID 마다 Location Cnt
326
 */
325
 */
327
 uint8_t RGB_BufCal(uint8_t srcid){
326
 uint8_t RGB_BufCal(uint8_t srcid){
328
     uint8_t ret = 0;
327
     uint8_t ret = 0;
@@ -379,12 +378,13 @@ void RGB_Controller_Func(uint8_t* data){
379
             break;
378
             break;
380
         case RGB_Status_Data_Response:
379
         case RGB_Status_Data_Response:
381
             datalosscnt[data[bluecell_srcid]] = 0;
380
             datalosscnt[data[bluecell_srcid]] = 0;
382
-            data[bluecell_length] += 1;// Device On OFF status  Send byte
383
-            data[bluecell_srcid + 9]  = RGB_DeviceStatusCheck();// Device On OFF status  Send byte
384
-            memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
385
-            Result_buf[5]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
381
+            data[bluecell_length] += 1;
386
             RGB_Alarm_Check(&data[bluecell_stx]);
382
             RGB_Alarm_Check(&data[bluecell_stx]);
387
-           
383
+            memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
384
+            Result_buf[Result_buf[bluecell_length] - 1]   = RGB_DeviceStatusCheck();// Device On OFF status  Send byte
385
+            Result_buf[Result_buf[bluecell_length] + 0]   = Lora_Buf[bluecell_srcid + 2];
386
+            Result_buf[Result_buf[bluecell_length] + 1]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
387
+            Result_buf[Result_buf[bluecell_length] + 2]   = 0xeb;
388
             break;
388
             break;
389
         case RGB_ControllerLimitSet:
389
         case RGB_ControllerLimitSet:
390
             memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
390
             memcpy(&Result_buf[bluecell_stx],&data[bluecell_stx],data[bluecell_length] + 3);
@@ -427,7 +427,11 @@ void RGB_Controller_Func(uint8_t* data){
427
             Result_buf[bluecell_srcid + 6]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
427
             Result_buf[bluecell_srcid + 6]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
428
             Result_buf[bluecell_srcid + 7]   = 0xeb;
428
             Result_buf[bluecell_srcid + 7]   = 0xeb;
429
             break;
429
             break;
430
+        case RGB_Lora_DataRequest:
431
+            LoraDataSendSet(1);
432
+            break;
430
         default:
433
         default:
434
+        
431
             break;
435
             break;
432
     }
436
     }
433
     RGB_Response_Func(&Result_buf[bluecell_stx]);
437
     RGB_Response_Func(&Result_buf[bluecell_stx]);

+ 15 - 9
Src/main.c

@@ -88,6 +88,8 @@ uint8_t RGB_SensorIDAutoset = 0;
88
 volatile uint32_t UartTimerCnt = 0;
88
 volatile uint32_t UartTimerCnt = 0;
89
 volatile uint32_t LedTimerCnt = 0;
89
 volatile uint32_t LedTimerCnt = 0;
90
 volatile uint32_t LoraTxTimerCnt = 0;
90
 volatile uint32_t LoraTxTimerCnt = 0;
91
+volatile uint32_t LoraAckTimerCnt = 0;
92
+
91
 
93
 
92
 
94
 
93
 uint8_t buf[buf_size] = {0,};
95
 uint8_t buf[buf_size] = {0,};
@@ -98,6 +100,10 @@ uint8_t buf2[buf_size] = {0,};
98
 
100
 
99
 uint8_t MyControllerID = 0;
101
 uint8_t MyControllerID = 0;
100
 uint8_t  SensorID = 0;
102
 uint8_t  SensorID = 0;
103
+typedef enum{
104
+    LoraRx_mode = 0,
105
+    LoraTx_mode ,
106
+};
101
 
107
 
102
 /* USER CODE END PV */
108
 /* USER CODE END PV */
103
 
109
 
@@ -180,6 +186,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
180
         UartTimerCnt++;
186
         UartTimerCnt++;
181
         LedTimerCnt++;
187
         LedTimerCnt++;
182
         LoraTxTimerCnt++;
188
         LoraTxTimerCnt++;
189
+        LoraAckTimerCnt++;
183
     }
190
     }
184
 }
191
 }
185
 void LoraDataSendSet(uint8_t val){
192
 void LoraDataSendSet(uint8_t val){
@@ -644,30 +651,29 @@ int main(void)
644
   {
651
   {
645
      if(LoraTxTimerCnt > LORA_TIMER_CNT){
652
      if(LoraTxTimerCnt > LORA_TIMER_CNT){
646
         LoraTxTimerCnt = 0;
653
         LoraTxTimerCnt = 0;
647
-        LoraDataSendSet(1);
654
+//        LoraDataSendSet(1);
648
     }
655
     }
649
     RGB_Alarm_Operate();//LED ALARM CHECK
656
     RGB_Alarm_Operate();//LED ALARM CHECK
650
-    if(LoraDataSendGet() == 1){
651
-        LoraDataSendSet(0);
657
+    if(LoraDataSendGet() == LoraTx_mode){
658
+//        LoraDataSendSet(0);
652
         memcpy(&buffer[0],&Lora_Buf[0],LORA_MAX_DATA_CNT);
659
         memcpy(&buffer[0],&Lora_Buf[0],LORA_MAX_DATA_CNT);
653
         message_length = Lora_Max_Amount + 3;////RGB Data 60byte + stx + etx + crc
660
         message_length = Lora_Max_Amount + 3;////RGB Data 60byte + stx + etx + crc
654
         ret = SX1276_LoRaEntryTx(&SX1276, message_length, 2000);
661
         ret = SX1276_LoRaEntryTx(&SX1276, message_length, 2000);
655
         ret = SX1276_LoRaTxPacket(&SX1276, &buffer[0], message_length, 2000);
662
         ret = SX1276_LoRaTxPacket(&SX1276, &buffer[0], message_length, 2000);
656
-//        printf("Tx data  :");
657
-//        for(uint8_t i = 0; i < message_length;i++ )
658
-//        printf("%02x ",buffer[i]);
659
-//        printf("\n");
663
+        LoraDataSendSet(0);
664
+        ret = SX1276_LoRaEntryRx(&SX1276, LORA_MAX_DATA_CNT, 2000);
660
     }else {
665
     }else {
661
-//            HAL_Delay(1);
662
            ret = SX1276_LoRaRxPacket(&SX1276);
666
            ret = SX1276_LoRaRxPacket(&SX1276);
663
            if (ret > 0) {
667
            if (ret > 0) {
664
                SX1276_read(&SX1276, &buffer[0], ret);
668
                SX1276_read(&SX1276, &buffer[0], ret);
669
+#if 1 // PYJ.2019.04.22_BEGIN -- 
665
                printf("Received Data : ");
670
                printf("Received Data : ");
666
                for(uint8_t i = 0; i < ret; i++)
671
                for(uint8_t i = 0; i < ret; i++)
667
                printf("%02x ",  buffer[i]);
672
                printf("%02x ",  buffer[i]);
668
                printf("\n");
673
                printf("\n");
674
+#endif // PYJ.2019.04.22_END -- 
675
+               Uart_dataCheck(&buffer[bluecell_stx],&ret);
669
            }
676
            }
670
-       
671
        }
677
        }
672
     
678
     
673
      if(count_in1 != count_out1){ // <------- 
679
      if(count_in1 != count_out1){ // <-------