Ver código fonte

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

Lora Tx/Rx Ver.0.1
june9152 6 anos atrás
pai
commit
71384b15f1

BIN
Debug/STM32F103_RGB_Controller.bin


BIN
Debug/STM32F103_RGB_Controller.binary


BIN
Debug/STM32F103_RGB_Controller.elf


Diferenças do arquivo suprimidas por serem muito extensas
+ 4536 - 4500
Debug/STM32F103_RGB_Controller.list


Diferenças do arquivo suprimidas por serem muito extensas
+ 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 6
 RGB_Controller.c:172:6:RGB_Sensor_LED_Alarm_OFF	8	static
7 7
 RGB_Controller.c:211:6:RGB_Alarm_Operate	32	static
8 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 10
 RGB_Controller.c:301:6:RGB_Data_Stack	24	static
11 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 134
     RGB_ControllerID_GET,           //16
135 135
     RGB_Controller_Update_Ack,      //17
136 136
     RGB_ControllerLimitGet ,        //18    
137
+    RGB_Lora_Init_Request,
138
+    RGB_Lora_Init_Response,
139
+    RGB_Lora_DataRequest,
140
+    RGB_Lora_DataResponse,
137 141
 }RGB_CMD_T;
142
+
138 143
 #define     RGB_ControllerID_SET_Length         10 
139 144
 #define     RGB_SensorID_SET_Length             10 
140 145
 #define     RGB_SensorDataRequest_Length        7
@@ -142,7 +147,6 @@ typedef enum{
142 147
 #define     RGB_SensorIDCheckSetRequest_Length  4
143 148
 
144 149
 
145
-#define     RGB_SensorDataResponse_Length       15
146 150
 #define     RGB_SensorDataResponseData_Length   RGB_SensorDataResponse_Length - 3
147 151
 #define     Lora_Max_Amount                     5
148 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 90
             Uart2_Data_Send(data,RGB_SensorIDAutoSetRequest_Length);
91 91
             break;        
92 92
         case RGB_Status_Data_Response:
93
-            Uart1_Data_Send(data,RGB_SensorDataResponse_Length);
93
+            Uart1_Data_Send(data,data[bluecell_length] + 3);
94 94
             break;
95 95
         case RGB_ControllerLimitSet:
96 96
             Uart1_Data_Send(data,data[bluecell_length] + 3);
@@ -211,15 +211,15 @@ void RGB_Alarm_Operate(void){
211 211
     uint8_t temp_warning = 0;
212 212
     for(uint8_t i = 1; i <= (SensorID_Cnt); i++){
213 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 215
             RGB_Sensor_LED_Alarm_ON(SensorID_buf[i]);
216 216
             temp_warning = 1; 
217 217
         }else{
218 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 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 246
     RGB_Data_Stack(&LED_Alarm[1]);
247 247
     if(Prev_Alarm_occur != Alarm_occur){
248
-         LoraDataSendSet(1);
248
+//         LoraDataSendSet(1);
249 249
          Prev_Alarm_occur = Alarm_occur;
250 250
     }
251 251
 }
@@ -295,19 +295,18 @@ uint8_t RGB_BufCal(uint8_t srcid){
295 295
 #else //Uart Flag Data
296 296
 /*
297 297
     현재 Controller 가지고 있는 RGB Sensor ID Check
298
-    현재 비정상적인 동작을 하는 Sensor 에대한 Flag 정보 
298
+    현재 비정상적인 동작을 하는 Sensor 에대한 Flag 정보
299 299
 */
300 300
 void RGB_Data_Stack(uint8_t* rgb_buf){
301 301
     memset(&Lora_Buf[0],0x00,8);
302 302
     /*********************FIX DATA*************************************/
303 303
     Lora_Buf[bluecell_stx]         = 0xbe;
304 304
     Lora_Buf[bluecell_srcid + 4]   = 0xeb;
305
-    
306 305
     Lora_Buf[bluecell_type]        = RGB_Lora_Data_Report;
307 306
     Lora_Buf[bluecell_length]      = Lora_Max_Amount;// RGB Data 5byte
308 307
     Lora_Buf[bluecell_srcid]       = MyControllerID;
309 308
     /*********************FIX DATA*************************************/
310
-    if(RGB_BufCal(SensorID_buf[1]) == 0){//아무런 Device가 존재 하지않을 때 
309
+    if(RGB_BufCal(SensorID_buf[1]) == 0){//아무런 Device가 존재 하지않을 때
311 310
         printf("Not Exist Device \n");
312 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 326
 uint8_t RGB_BufCal(uint8_t srcid){
328 327
     uint8_t ret = 0;
@@ -379,12 +378,13 @@ void RGB_Controller_Func(uint8_t* data){
379 378
             break;
380 379
         case RGB_Status_Data_Response:
381 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 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 388
             break;
389 389
         case RGB_ControllerLimitSet:
390 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 427
             Result_buf[bluecell_srcid + 6]   = STH30_CreateCrc(&Result_buf[bluecell_type],Result_buf[bluecell_length]);
428 428
             Result_buf[bluecell_srcid + 7]   = 0xeb;
429 429
             break;
430
+        case RGB_Lora_DataRequest:
431
+            LoraDataSendSet(1);
432
+            break;
430 433
         default:
434
+        
431 435
             break;
432 436
     }
433 437
     RGB_Response_Func(&Result_buf[bluecell_stx]);

+ 15 - 9
Src/main.c

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