Переглянути джерело

수정 내역

1.Atten Data Set 할 때 통합 으로 설정 하도록 수정
2.구조체에서 쓸모없는 구조체 제거
3.구조체 EEPROM Write를 위해 32byte 배수로 맞춤
4.DataWrite Tx 할 때 사용하는 변수 Size 변경
5.LED Timer HFR 업체에서 요청하는 대로 0.5초에서 1초로 변경
6.Fail LED 와 ACT LED 회로상 색상 잘못기입 Firmware로 수정
7.Alarm Data 있을 때 LED 동작하도록 수정
8.ALC/AGC 동작 계산공식 추가
9. Alarm Check 하는 함수 추가
10.Alarm Timer Cnt와 Alarm Timer Cnt On 시키는 변수 추가
11.최초 Booting 시 LED 3회 점멸 후 동작하도록 수정
12. Timer CallBack 함수 에서 AlarmTimerSet 함수가 True 일 때만 AlarmTimerCnt 가 증가하도록 수정
13.CubeMX에서 LED 회로 오타 수정
 사유 :
 ACT != 빨강  -> ACT == 초록
Fail != 초록    -> Fail == 빨강
으로 변경
PYJ 5 роки тому
батько
коміт
74a68e440f
5 змінених файлів з 429 додано та 382 видалено
  1. 20 25
      Bluecell_Inc/Bluecell_operate.h
  2. 378 337
      Bluecell_Src/Bluecell_operate.c
  3. 4 4
      Inc/main.h
  4. 2 2
      STM32F103ZET_JDASMBIC.ioc
  5. 25 14
      Src/main.c

+ 20 - 25
Bluecell_Inc/Bluecell_operate.h

@@ -252,7 +252,6 @@ ULO_Shutdown_Alarm4,
252 252
 enum DATATYPE
253 253
 {
254 254
     BLUECELL_SOFTWARERESET = 0,
255
-	ATTSET  = 0x11,
256 255
 	ATT_DL1_PATH = 0x12,
257 256
 	ATT_UL1_PATH = 0x16,
258 257
 	ATT_SelfTest1 = 0x18,
@@ -309,7 +308,23 @@ enum DATATYPE
309 308
     Bluecell_ULO_Shutdown_Threshold                  ,
310 309
     Bluecell_ULO_Shutdown_Threshold_Default          ,
311 310
     Bluecell_ULO_Shutdown_Retry_Count                ,
312
-    Bluecell_Reset,
311
+    Bluecell_Alarm_Mask,
312
+    Bluecell_ATT_DL1,
313
+    Bluecell_ATT_DL2,
314
+    Bluecell_ATT_DL3,
315
+    Bluecell_ATT_DL4,
316
+    Bluecell_ATT_UL1,
317
+    Bluecell_ATT_UL2,
318
+    Bluecell_ATT_UL3,
319
+    Bluecell_ATT_UL4,
320
+    Bluecell_ATT_DL1_USER,
321
+    Bluecell_ATT_DL2_USER,
322
+    Bluecell_ATT_DL3_USER,
323
+    Bluecell_ATT_DL4_USER,
324
+    Bluecell_ATT_UL1_USER,
325
+    Bluecell_ATT_UL2_USER,
326
+    Bluecell_ATT_UL3_USER,
327
+    Bluecell_ATT_UL4_USER,    
313 328
 
314 329
 };
315 330
 typedef enum{    
@@ -473,7 +488,7 @@ typedef struct{
473 488
     uint8_t BLUECELL_RESERVE1;
474 489
     uint8_t DET_TEMP;
475 490
     uint8_t DLI_AGC_ON_OFF;
476
-    uint8_t ATT_ALC1_ONOFF;
491
+    uint8_t ULO_ALC_ON_OFF;
477 492
     uint8_t ATT_AGC2_ONOFF;
478 493
     uint8_t ATT_ALC2_ONOFF;
479 494
     uint8_t ATT_AGC3_ONOFF;
@@ -525,6 +540,8 @@ typedef struct{
525 540
     uint8_t ALARM_TEMP_HIGH; //bit
526 541
     uint8_t ALARM_DLI_Level;
527 542
     uint8_t ALARM_DLI_AGC_SHTUTDOWN;
543
+    uint8_t ALARM_DLI_AGC_Alarm;
544
+    uint8_t ALARM_ULO_ALC_Alarm;    
528 545
     uint8_t ALARM_ULO_Level;
529 546
     uint8_t ALARM_ULO_ALC_SHTUTDOWN;
530 547
     uint8_t ALARM_MASK1;
@@ -559,11 +576,8 @@ typedef struct{
559 576
     uint8_t CPU_Bank2_Image_Name[32];
560 577
     uint8_t S_W_Reset;
561 578
     uint8_t Factory_Set_Initialization;
562
-    
563 579
     uint8_t Temp_High_Alarm;
564
-    
565 580
     uint8_t LED_TEST;
566
-    
567 581
     uint8_t NODE;
568 582
     uint8_t Type;
569 583
     uint8_t PCB_Version[2];
@@ -573,7 +587,6 @@ typedef struct{
573 587
     uint8_t Freq_ID;
574 588
     uint8_t Carrier_ID;
575 589
     uint8_t Carrier_ON_OFF;
576
-    
577 590
     uint8_t DLI_Level_High_Alarm1;
578 591
     uint8_t DLI_Level_High_Alarm2;
579 592
     uint8_t DLI_Level_High_Alarm3;
@@ -582,23 +595,16 @@ typedef struct{
582 595
     uint8_t DLI_Level_Low_Alarm2;
583 596
     uint8_t DLI_Level_Low_Alarm3;
584 597
     uint8_t DLI_Level_Low_Alarm4;
585
-    
586 598
     uint8_t DLI_FRBT_Atten1_H;
587 599
     uint8_t DLI_FRBT_Atten1_L;    
588
-
589 600
     uint8_t DLI_FRBT_Atten2_H;
590 601
     uint8_t DLI_FRBT_Atten2_L;    
591
-    
592 602
     uint8_t DLI_FRBT_Atten3_H;
593 603
     uint8_t DLI_FRBT_Atten3_L;    
594
-    
595 604
     uint8_t DLI_FRBT_Atten4_H;
596 605
     uint8_t DLI_FRBT_Atten4_L;    
597
-
598 606
     uint8_t DLI_FRBT_D_Day;
599
-    
600 607
     uint8_t DLI_FRBT_Status;
601
-    
602 608
     uint8_t DLI_AGC_Threshold_H;
603 609
     uint8_t DLI_AGC_Threshold_L;
604 610
     uint8_t DLI_AGC_Threshold_default;
@@ -618,13 +624,8 @@ typedef struct{
618 624
     uint8_t DLI_Shutdown_Alarm2;
619 625
     uint8_t DLI_Shutdown_Alarm3;
620 626
     uint8_t DLI_Shutdown_Alarm4;
621
-
622
-    
623
-
624
-    
625 627
     uint8_t ULO_Level_High_Threshold_H;
626 628
     uint8_t ULO_Level_High_Threshold_L;
627
-    
628 629
     uint8_t ULO_Level_High_Threshold_default;
629 630
     uint8_t ULO_Level1_H;
630 631
     uint8_t ULO_Level1_L;
@@ -646,7 +647,6 @@ typedef struct{
646 647
     uint8_t ULO_Level_High_Alarm2;
647 648
     uint8_t ULO_Level_High_Alarm3;
648 649
     uint8_t ULO_Level_High_Alarm4;
649
-    uint8_t ULO_ALC_ON_OFF;
650 650
     uint8_t ULO_ALC_Threshold_Default;
651 651
     uint8_t ULO_Shutdown_ON_OFF;
652 652
     uint8_t ULO_Shutdown_Threshold_H;
@@ -664,7 +664,6 @@ typedef struct{
664 664
     uint8_t ULO_Shutdown_Alarm2;
665 665
     uint8_t ULO_Shutdown_Alarm3;
666 666
     uint8_t ULO_Shutdown_Alarm4;
667
-
668 667
     uint8_t Reserve0;
669 668
     uint8_t Reserve1;
670 669
     uint8_t Reserve2;
@@ -672,10 +671,6 @@ typedef struct{
672 671
     uint8_t Reserve4;
673 672
     uint8_t Reserve5;
674 673
     uint8_t Reserve6;
675
-    uint8_t Reserve7;    
676
-    uint8_t Reserve8;
677
-    uint8_t Reserve9;
678
-
679 674
     uint8_t bluecell_crc;
680 675
     uint8_t bluecell_etx;
681 676
 

+ 378 - 337
Bluecell_Src/Bluecell_operate.c

@@ -19,8 +19,10 @@ void Alarm_Check();
19 19
 uint8_t Alarm_Status[MAX_ALARM_Len] = {0,};
20 20
 //uint8_t data123[10000];
21 21
 uint8_t ResultData[1024] = {0,};
22
-uint8_t DataWrite[512] = {0,};
22
+uint8_t DataWrite[sizeof(BLUESTATUS_st)] = {0,};
23 23
 uint8_t DataRead[512] = {0,};
24
+extern volatile bool     AlarmTimerSet;
25
+extern volatile uint32_t AlarmTimerCnt;
24 26
 
25 27
 
26 28
 typedef enum{
@@ -258,19 +260,41 @@ double TableAtteGuarantee(uint8_t* Table,double AttenValue);
258 260
 uint8_t PE43711_Calc(uint8_t* Table,uint8_t high_bit,uint8_t low_bit,uint8_t offset_h,uint8_t offset_l);
259 261
 uint8_t PE43711_Calc_NoTable(uint8_t high_bit,uint8_t low_bit);
260 262
 double PE43711_Double(uint8_t high_bit,uint8_t low_bit);
263
+void Booting_LED_Check(void);
264
+
261 265
 int8_t AutoControl_Save[sizeof(ALC_dBm_t)];
262 266
 
263 267
 uint8_t MBIC_TxDataArray[256] = {0,};
268
+void Booting_LED_Check(void){
269
+    for(int i = 0; i < 6; i ++){
270
+        HAL_GPIO_TogglePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin);
271
+        HAL_GPIO_TogglePin(LED_ACT_GPIO_Port,LED_ACT_Pin);
272
+        HAL_GPIO_TogglePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin);
273
+        HAL_Delay(1000);
274
+    }
275
+}
264 276
 
265 277
 
266 278
 void Boot_LED_Toggle(void){
267
-  if(LedTimerCnt > 500){
279
+  if(LedTimerCnt > 1000){
268 280
     HAL_GPIO_TogglePin(BOOT_LED_GPIO_Port,BOOT_LED_Pin);
269 281
     HAL_GPIO_TogglePin(LED_ACT_GPIO_Port,LED_ACT_Pin);
270
-    HAL_GPIO_TogglePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin);  
282
+    if((bluecell_Currdatastatus.ALARM_TEMP_HIGH             > 0 
283
+    || bluecell_Currdatastatus.ALARM_DLI_Level             > 0
284
+    || bluecell_Currdatastatus.ALARM_DLI_AGC_SHTUTDOWN     > 0
285
+    || bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm         > 0
286
+    || bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm         > 0
287
+    || bluecell_Currdatastatus.ALARM_ULO_Level             > 0
288
+    || bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN     > 0) 
289
+    && bluecell_Currdatastatus.ALARM_MASK1                 > 0){
290
+        HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_SET);
291
+    }else{
292
+        HAL_GPIO_WritePin(LED_FAIL_GPIO_Port,LED_FAIL_Pin,GPIO_PIN_RESET);
293
+    }
271 294
     LedTimerCnt = 0;
272 295
 //    printf("LED OF OFF\r\n");
273 296
   }
297
+  
274 298
 }
275 299
 
276 300
 
@@ -705,7 +729,6 @@ void Bluecell_TableLoad(uint8_t* data,uint8_t type){
705 729
     switch(tabletype){
706 730
         case DLI_P1_ATT_Accuracy_Table_Number: 
707 731
             EEPROM_M24C08_Read(EEPROM_M24C08_ID ,EEPROM_ATT_BASE              ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
708
-//            EEPROM_M24C08_Read(EEPROM_M24C08_ID ,EEPROM_WINDOW_STATUS_ADDRESDS              ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
709 732
             Bluecell_DataCopy(&data[BLUECELL_DATA + 1],&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
710 733
 //            Bluecell_structprintf(&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
711 734
             data[BLUECELL_LENGTH] = (sizeof(ATT_TABLE_st)) + 7 - 3;
@@ -849,9 +872,6 @@ void Bluecell_TableSave(uint8_t* data,uint8_t type){
849 872
         case DLI_P1_ATT_Accuracy_Table_Number: 
850 873
             Bluecell_DataCopy(&Att_DL1.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
851 874
             EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_ATT_BASE)              ,&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st) );
852
-//            Bluecell_structprintf(&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
853
-//            printf("ADDRESS : %d \r\n",EEPROM_WINDOW_STATUS_ADDRESDS );
854
-//            Bluecell_structprintf(&Att_DL1.Table_0_0_dBm,sizeof(ATT_TABLE_st));
855 875
             break;
856 876
         case DLI_P2_ATT_Accuracy_Table_Number: 
857 877
             Bluecell_DataCopy(&Att_DL2.Table_0_0_dBm,&data[BLUECELL_DATA + 1],sizeof(ATT_TABLE_st));
@@ -972,55 +992,82 @@ bool Bluecell_Operate(uint8_t* data){
972 992
     case BLUECELL_SOFTWARERESET:
973 993
         NVIC_SystemReset();
974 994
         break;
975
-	case ATTSET 				 :
995
+	case Bluecell_ATT_DL1 				 :
976 996
 //		printf("Function : %s Line %d \r\n",__func__,__LINE__);
977 997
         bluecell_Currdatastatus.ATT_DL1_H = data[BLUECELL_DATA + i++];
978 998
         bluecell_Currdatastatus.ATT_DL1_L = data[BLUECELL_DATA + i++];
979 999
 //        printf("bluecell_Currdatastatus.ATT_DL1_H : %x\r\n",bluecell_Currdatastatus.ATT_DL1_H);
980 1000
 //        printf("bluecell_Currdatastatus.ATT_DL1_L : %x\r\n",bluecell_Currdatastatus.ATT_DL1_L);        
1001
+        /*
1002
+            Atten Ctrl Function
1003
+        */
1004
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1005
+        break;
1006
+    case Bluecell_ATT_DL2                :
981 1007
         bluecell_Currdatastatus.ATT_DL2_H = data[BLUECELL_DATA + i++];
982 1008
         bluecell_Currdatastatus.ATT_DL2_L = data[BLUECELL_DATA + i++];
1009
+    
1010
+        /*
1011
+            Atten Ctrl Function
1012
+        */
1013
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1014
+        break;
1015
+	case Bluecell_ATT_DL3 				 :        
983 1016
         bluecell_Currdatastatus.ATT_DL3_H = data[BLUECELL_DATA + i++];
984 1017
         bluecell_Currdatastatus.ATT_DL3_L = data[BLUECELL_DATA + i++];
1018
+    
1019
+        /*
1020
+            Atten Ctrl Function
1021
+        */
1022
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1023
+        break;
1024
+	case Bluecell_ATT_DL4 				 :    
985 1025
         bluecell_Currdatastatus.ATT_DL4_H = data[BLUECELL_DATA + i++];
986 1026
         bluecell_Currdatastatus.ATT_DL4_L = data[BLUECELL_DATA + i++];
1027
+    
1028
+        /*
1029
+            Atten Ctrl Function
1030
+        */
1031
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1032
+        break;
1033
+    case Bluecell_ATT_UL1                :
987 1034
 
988 1035
         bluecell_Currdatastatus.ATT_UL1_H = data[BLUECELL_DATA + i++];
989 1036
         bluecell_Currdatastatus.ATT_UL1_L = data[BLUECELL_DATA + i++];
1037
+    
1038
+        /*
1039
+            Atten Ctrl Function
1040
+        */
1041
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1042
+        //        printf("bluecell_Currdatastatus.ATT_UL1_H : %x\r\n",bluecell_Currdatastatus.ATT_UL1_H);
1043
+        //        printf("bluecell_Currdatastatus.ATT_UL1_L : %x\r\n",bluecell_Currdatastatus.ATT_UL1_L);        
1044
+        break;
1045
+    case Bluecell_ATT_UL2                :        
990 1046
         bluecell_Currdatastatus.ATT_UL2_H = data[BLUECELL_DATA + i++];
991 1047
         bluecell_Currdatastatus.ATT_UL2_L = data[BLUECELL_DATA + i++];
1048
+    
1049
+        /*
1050
+            Atten Ctrl Function
1051
+        */
1052
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1053
+        break;    
1054
+    case Bluecell_ATT_UL3                :    
992 1055
         bluecell_Currdatastatus.ATT_UL3_H = data[BLUECELL_DATA + i++];
993 1056
         bluecell_Currdatastatus.ATT_UL3_L = data[BLUECELL_DATA + i++];
1057
+    
1058
+        /*
1059
+            Atten Ctrl Function
1060
+        */
1061
+		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1062
+        break;    
1063
+    case Bluecell_ATT_UL4                :        
994 1064
         bluecell_Currdatastatus.ATT_UL4_H = data[BLUECELL_DATA + i++];
995 1065
         bluecell_Currdatastatus.ATT_UL4_L = data[BLUECELL_DATA + i++];
996
-
997
-        bluecell_Currdatastatus.ATT_ALC1_MAX_H = data[BLUECELL_DATA + i++];
998
-        bluecell_Currdatastatus.ATT_ALC1_MAX_L = data[BLUECELL_DATA + i++];
999
-        bluecell_Currdatastatus.ATT_ALC2_MAX_H = data[BLUECELL_DATA + i++];
1000
-        bluecell_Currdatastatus.ATT_ALC2_MAX_L = data[BLUECELL_DATA + i++];
1001
-        bluecell_Currdatastatus.ATT_ALC3_MAX_H = data[BLUECELL_DATA + i++];
1002
-        bluecell_Currdatastatus.ATT_ALC3_MAX_L = data[BLUECELL_DATA + i++];
1003
-        bluecell_Currdatastatus.ATT_ALC4_MAX_H = data[BLUECELL_DATA + i++];
1004
-        bluecell_Currdatastatus.ATT_ALC4_MAX_L = data[BLUECELL_DATA + i++];
1005
-        bluecell_Currdatastatus.ATT_ALC_Threshold_H = data[BLUECELL_DATA + i++]; // 20
1006
-        bluecell_Currdatastatus.ATT_ALC_Threshold_L = data[BLUECELL_DATA + i++];
1007
-        bluecell_Currdatastatus.ATT_ALC2_MIN_H = data[BLUECELL_DATA + i++];
1008
-        bluecell_Currdatastatus.ATT_ALC2_MIN_L = data[BLUECELL_DATA + i++];
1009
-        bluecell_Currdatastatus.ATT_ALC3_MIN_H = data[BLUECELL_DATA + i++];
1010
-        bluecell_Currdatastatus.ATT_ALC3_MIN_L = data[BLUECELL_DATA + i++];
1011
-        bluecell_Currdatastatus.ATT_ALC4_MIN_H = data[BLUECELL_DATA + i++];
1012
-        bluecell_Currdatastatus.ATT_ALC4_MIN_L = data[BLUECELL_DATA + i++];
1013
-//        printf("ALC 1 H: %x \r\n",        bluecell_Currdatastatus.ATT_ALC1_MAX_H);
1014
-//        printf("ALC 1 L: %x \r\n",        bluecell_Currdatastatus.ATT_ALC1_MAX_L);
1015
-//        printf("bluecell_Currdatastatus.ATT_ALC4_MAX_H : %x \r\nbluecell_Currdatastatus.ATT_ALC4_MAX_L : %x\r\n",
1016
-            //bluecell_Currdatastatus.ATT_ALC4_MAX_H,bluecell_Currdatastatus.ATT_ALC4_MAX_L);
1017
-     //   memcpy(&bluecell_Currdatastatus.ATT_DL1_H,&data[BLUECELL_DATA],32);
1018
-//		bluecell_Currdatastatus.ATT_DL1_H =  data[BLUECELL_DATA + i++];
1019
-//		bluecell_Currdatastatus.ATT_DL1_L =  data[BLUECELL_DATA + 1];
1020 1066
         /*
1021 1067
             Atten Ctrl Function
1022 1068
         */
1023 1069
 		CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
1070
+        break;
1024 1071
 //		printf("ret : %f ,tmp %f \r\n",ret,tmp );
1025 1072
 		break;
1026 1073
 	case ATT_DL1_PATH 		 :
@@ -1180,10 +1227,10 @@ bool Bluecell_Operate(uint8_t* data){
1180 1227
 		break;
1181 1228
     case ALC1_EN :
1182 1229
         if(data[BLUECELL_DATA]==0){
1183
-            bluecell_Currdatastatus.ATT_ALC1_ONOFF = false;
1230
+            bluecell_Currdatastatus.ULO_ALC_ON_OFF = false;
1184 1231
         }
1185 1232
         else{
1186
-            bluecell_Currdatastatus.ATT_ALC1_ONOFF = true;
1233
+            bluecell_Currdatastatus.ULO_ALC_ON_OFF = true;
1187 1234
         }
1188 1235
     break;
1189 1236
     case ALC2_EN :
@@ -1264,7 +1311,7 @@ bool Bluecell_Operate(uint8_t* data){
1264 1311
         break;
1265 1312
     case Bluecell_StatusReq:
1266 1313
         DataStatusSet();
1267
-        Bluecell_StructCpy(&Txdata[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1314
+        Bluecell_StructCpy(&Txdata[0],&bluecell_Currdatastatus.bluecell_header,94);
1268 1315
         Txdata[BLUECELL_LENGTH] = 94 - 3;//sizeof(BLUESTATUS_st) - 3;
1269 1316
         Txdata[94 - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], Txdata[BLUECELL_LENGTH]);
1270 1317
 #if 0 // PYJ.2020.04.22_BEGIN -- 
@@ -1347,7 +1394,7 @@ bool Bluecell_Operate(uint8_t* data){
1347 1394
 
1348 1395
         break;
1349 1396
     case Bluecell_ULO_ALC_ON_OFF:                             
1350
-        bluecell_Currdatastatus.ATT_ALC1_ONOFF = data[BLUECELL_DATA + i];
1397
+        bluecell_Currdatastatus.ULO_ALC_ON_OFF = data[BLUECELL_DATA + i];
1351 1398
         break;
1352 1399
     case Bluecell_DLI_AGC_Threshold:                          
1353 1400
         bluecell_Currdatastatus.DLI_AGC_Threshold_H = data[BLUECELL_DATA + i++];
@@ -1403,8 +1450,8 @@ bool Bluecell_Operate(uint8_t* data){
1403 1450
         bluecell_Currdatastatus.DLI_Level_High_Threshold_L = data[BLUECELL_DATA + i++];
1404 1451
         tempdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
1405 1452
         tempdata +=  bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
1406
-//        tempdata /= 10;
1407
-//        printf("tempdata : %d\r\n",tempdata);
1453
+        tempdata /= 10;
1454
+        printf("tempdata : %d\r\n",tempdata);
1408 1455
 //        bluecell_Currdatastatus.DLI_Level_High_Threshold_H = ((tempdata & 0xFF00) >> 8);
1409 1456
 //        bluecell_Currdatastatus.DLI_Level_High_Threshold_L = (tempdata & 0x00FF);
1410 1457
         break;
@@ -1473,8 +1520,8 @@ bool Bluecell_Operate(uint8_t* data){
1473 1520
         bluecell_Currdatastatus.ATT_ALC_Threshold_L = data[BLUECELL_DATA + i++];
1474 1521
         tempdata = (( bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8) & 0xFF00) ;
1475 1522
         tempdata +=  bluecell_Currdatastatus.ATT_ALC_Threshold_L ;
1476
-//        tempdata /= 10;
1477
-//        printf("tempdata : %d\r\n",tempdata);
1523
+        tempdata /= 10;
1524
+        printf("tempdata : %d\r\n",tempdata);
1478 1525
 //        bluecell_Currdatastatus.ATT_ALC_Threshold_H = ((tempdata & 0xFF00) >> 8);
1479 1526
 //        bluecell_Currdatastatus.ATT_ALC_Threshold_L = (tempdata & 0x00FF);
1480 1527
 
@@ -1514,10 +1561,15 @@ bool Bluecell_Operate(uint8_t* data){
1514 1561
         break;
1515 1562
     case Bluecell_ULO_Shutdown_Retry_Count                :   
1516 1563
         break;
1564
+    case Bluecell_Alarm_Mask:
1565
+        bluecell_Currdatastatus.ALARM_MASK1 = data[BLUECELL_DATA + i+ 1];
1566
+         printf("%s : %d   ALARM_MASK1 : %d \r\n",__func__,__LINE__,bluecell_Currdatastatus.ALARM_MASK1);
1567
+        break;
1517 1568
   }
1518 1569
   if(datatype != Bluecell_StatusReq){
1519 1570
       Bluecell_StructCpy(&DataWrite[0],&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st));
1520 1571
       EEPROM_M24C08_write(EEPROM_M24C08_ID ,(EEPROM_WINDOW_STATUS_ADDRESDS),&DataWrite[0],sizeof(BLUESTATUS_st));
1572
+//      EEPROM_M24C08_Read(EEPROM_M24C08_ID,EEPROM_WINDOW_STATUS_ADDRESDS,&bluecell_Currdatastatus.bluecell_header,sizeof(BLUESTATUS_st) );
1521 1573
 //      Bluecell_StructCpy(&Txdata[0],&DataWrite[0],sizeof(BLUESTATUS_st));
1522 1574
 //      Txdata[sizeof(BLUESTATUS_st) - 2] = STH30_CreateCrc(&Txdata[BLUECELL_TYPE], sizeof(BLUESTATUS_st) - 3);
1523 1575
 //      Uart1_Data_Send(&Txdata[0], sizeof(BLUESTATUS_st));        
@@ -2543,7 +2595,6 @@ uint16_t Descendingcompare(const void *a, const void *b)    // 내림차순 비
2543 2595
     return 0;           // a와 b가 같을 때는 0 반환
2544 2596
 }
2545 2597
 void DascendigFunc(uint16_t* data,uint32_t size ){
2546
-
2547 2598
   int temp;
2548 2599
   for(int i = 0 ; i < size - 1 ; i ++) {
2549 2600
       for(int j = i+1 ; j < size ; j ++) {
@@ -2914,7 +2965,11 @@ int32_t MinusConvert(uint8_t Temp_h, int32_t Value){
2914 2965
      
2915 2966
     return ret;
2916 2967
 }
2917
-
2968
+int8_t ALC_Calc(int8_t threshold,double CurrDet){
2969
+    int8_t ret = 0;
2970
+    ret = CurrDet - threshold;
2971
+    return ret;
2972
+}
2918 2973
 void ALC_Function(){ //DL 
2919 2974
     double Volt_Calc_val = 3.3 / 4095;
2920 2975
     double ret = 0;
@@ -2923,13 +2978,17 @@ void ALC_Function(){ //DL
2923 2978
     int32_t CurrnALC_MAX_SettingValue = 0;    
2924 2979
     int32_t CurrnALC_MIN_SettingValue = 0;        
2925 2980
     int32_t ALC_Result = 0;
2981
+    int16_t Limitdata = 0;
2926 2982
     double ResdBm = 0;
2983
+    uint16_t IwillGiveAtten = 0;
2927 2984
     uint8_t tempadc[100];
2928 2985
     Bluecell_StructCpy(&AutoControl_Save[0],&ALC_Table_ref.DET_UL_0,sizeof(ALC_dBm_t));
2929 2986
     Bluecell_StructCpy(&tempadc[0],&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
2930 2987
     if(ALCTimerCnt > 100){
2931
-        if(bluecell_Currdatastatus.ATT_ALC1_ONOFF == true){
2932
-#if 1 // PYJ.2020.04.29_BEGIN -- 
2988
+        if(bluecell_Currdatastatus.ULO_ALC_ON_OFF == true){
2989
+            /***************************************************************************************************************/
2990
+            /*                                             ALC 1                                                           */
2991
+            /***************************************************************************************************************/            
2933 2992
             //ret 현재 Voltage 값 출력 
2934 2993
             //ret 에 따른 현재 DBM 구현 
2935 2994
             ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
@@ -2938,178 +2997,100 @@ void ALC_Function(){ //DL
2938 2997
             ResdBm = AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
2939 2998
 //            printf("db %f \r\n",ResdBm);
2940 2999
 //            HAL_Delay(1000);
2941
-#if 0 // PYJ.2020.05.14_BEGIN -- 
2942
-            //            printf("==================================\r\n");
3000
+//                        printf("==================================\r\n");
2943 3001
             //            printf("Current UL ADC VALUE : %f \r\n",ret);
2944
-            //            printf("ResdBm : UL1 : %f \r\n",ResdBm);
2945
-            //            HAL_Delay(1000);
2946
-            CurrnALC_MAX_SettingValue = bluecell_Currdatastatus.ATT_ALC1_MAX_H << 8;
2947
-            CurrnALC_MAX_SettingValue += bluecell_Currdatastatus.ATT_ALC1_MAX_L;
2948
-            CurrnALC_MAX_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL1_IN_H,CurrnALC_MAX_SettingValue);
2949
-            
2950
-            CurrnALC_MIN_SettingValue = bluecell_Currdatastatus.ATT_ALC1_MIN_H << 8;
2951
-            CurrnALC_MIN_SettingValue += bluecell_Currdatastatus.ATT_ALC1_MIN_L;
2952
-            CurrnALC_MIN_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL1_IN_H,CurrnALC_MIN_SettingValue);
2953
-
2954
-//            printf("CurrnALC_MAX_SettingValue : %d \r\n",CurrnALC_MAX_SettingValue);      
2955
-//            printf("CurrnALC_MIN_SettingValue : %d \r\n",CurrnALC_MIN_SettingValue);                  
2956
-//            printf("I WILL GIVE YOU ATTEN MAX : %d \r\n",ResdBm - CurrnALC_MAX_SettingValue);
2957
-//            printf("I WILL GIVE YOU ATTEN MIN : %d \r\n",ResdBm - CurrnALC_MIN_SettingValue);
2958
-//            printf("==================================\r\n");            
2959
-            ALC_Result  = ResdBm - CurrnALC_MAX_SettingValue;
2960
-            if(ALC_Result > 0){
2961
-                ALC_Result *= 100;
2962
-                ALC_Result +=  bluecell_Currdatastatus.ATT_UL1_H << 8 | bluecell_Currdatastatus.ATT_UL1_L;
2963
-                bluecell_Currdatastatus.ATT_UL1_H =  ((ALC_Result & 0xFF00) >> 8);
2964
-                bluecell_Currdatastatus.ATT_UL1_L =  ALC_Result & 0x00FF;               
2965
-                CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
2966
-            }else{
2967
-            }
2968
-#endif // PYJ.2020.05.14_END -- 
2969
-            CurrnALC_MIN_SettingValue = bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8;
2970
-            CurrnALC_MIN_SettingValue += bluecell_Currdatastatus.ATT_ALC_Threshold_L;
2971
-            CurrnALC_MIN_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL1_IN_H,CurrnALC_MIN_SettingValue);
3002
+//                        printf("ResdBm : UL1 : %f \r\n",ResdBm);
3003
+            Limitdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
3004
+            Limitdata +=  bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
3005
+
3006
+            Limitdata /= 10;
3007
+
3008
+            //CurrnALC_MIN_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL1_IN_H,CurrnALC_MIN_SettingValue);
3009
+//            Limitdata = (( bluecell_Currdatastatus.ATT_UL1_H << 8) & 0xFF00) ;
3010
+//            Limitdata +=  bluecell_Currdatastatus.ATT_UL1_L ;
3011
+//
3012
+//            Limitdata /= 10;
2972 3013
 
2973 3014
             CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL1_H,bluecell_Currdatastatus.ATT_UL1_L);
2974
-            uint16_t tempValue = 0;
2975
-            if(CurrnALC_MIN_SettingValue > ResdBm && CurrentATTENVALUE > 0){
2976
-                tempValue = (CurrentATTENVALUE*10);
2977
-                tempValue %= 10;
2978
-                if(tempValue > 0){
2979
-                    ALC_Result = CurrentATTENVALUE *10 -50;
2980
-                }else{
2981
-                    ALC_Result = CurrentATTENVALUE *10 -100;
2982
-                }
2983
-                 bluecell_Currdatastatus.ATT_UL1_H = ((ALC_Result & 0xFF00) >> 8);
2984
-                 bluecell_Currdatastatus.ATT_UL1_L = ALC_Result & 0x00FF;
3015
+            IwillGiveAtten = ALC_Calc(Limitdata,ResdBm);
3016
+//            printf("%f  %d : I WILL GIVE ATTEN  : %d \r\n",ResdBm , Limitdata,IwillGiveAtten);            
3017
+            
3018
+//            printf("CurrentATTENVALUE %f \r\n",CurrentATTENVALUE);
3019
+            IwillGiveAtten *=10;
2985 3020
 
3021
+            if((ResdBm > (Limitdata + 0.5)) || (ResdBm < (Limitdata - 0.5))){
3022
+                bluecell_Currdatastatus.ATT_UL1_H = ((IwillGiveAtten & 0xFF00) >> 8);
3023
+                bluecell_Currdatastatus.ATT_UL1_L = IwillGiveAtten & 0x00FF;
2986 3024
                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
2987
-                
2988
-            }else{
2989 3025
             }
2990
-#else
3026
+             /***************************************************************************************************************/
3027
+             /*                                             ALC 2                                                           */
3028
+             /***************************************************************************************************************/  
2991 3029
 
2992
-#endif // PYJ.2020.04.29_END -- 
2993
-        }
2994
-        if(bluecell_Currdatastatus.ATT_ALC2_ONOFF == true){
2995 3030
             ret  = bluecell_Currdatastatus.DET_UL2_IN_H << 8;
2996 3031
             ret += bluecell_Currdatastatus.DET_UL2_IN_L;   
2997 3032
             ret *= Volt_Calc_val;
2998 3033
             ResdBm = AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
2999
-//            printf("db %f \r\n",ResdBm);
3034
+            Limitdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
3035
+            Limitdata +=  bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
3036
+            Limitdata /= 10;
3000 3037
 
3001
-#if 0 // PYJ.2020.05.14_BEGIN -- 
3002
-            CurrnALC_MAX_SettingValue = bluecell_Currdatastatus.ATT_ALC2_MAX_H << 8;
3003
-            CurrnALC_MAX_SettingValue += bluecell_Currdatastatus.ATT_ALC2_MAX_L;
3004
-            CurrnALC_MAX_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL2_IN_H,CurrnALC_MAX_SettingValue);
3005
-            ALC_Result  = ResdBm - CurrnALC_MAX_SettingValue;
3006
-            
3007
-            if(ALC_Result > 0){
3008
-                ALC_Result *= 100;
3009
-                ALC_Result +=  bluecell_Currdatastatus.ATT_UL2_H << 8 | bluecell_Currdatastatus.ATT_UL2_L;
3010
-                bluecell_Currdatastatus.ATT_UL2_H =  ((ALC_Result & 0xFF00) >> 8);
3011
-                bluecell_Currdatastatus.ATT_UL2_L =  ALC_Result & 0x00FF;               
3038
+            CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL2_H,bluecell_Currdatastatus.ATT_UL2_L);
3039
+            IwillGiveAtten = ALC_Calc(Limitdata,ResdBm);
3040
+            IwillGiveAtten *=10;
3041
+            if((ResdBm > (Limitdata + 0.5)) || (ResdBm < (Limitdata - 0.5))){
3042
+                bluecell_Currdatastatus.ATT_UL2_H = ((IwillGiveAtten & 0xFF00) >> 8);
3043
+                bluecell_Currdatastatus.ATT_UL2_L = IwillGiveAtten & 0x00FF;
3012 3044
                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3013 3045
             }
3014
-#endif // PYJ.2020.05.14_END -- 
3015
-            CurrnALC_MIN_SettingValue = bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8;
3016
-            CurrnALC_MIN_SettingValue += bluecell_Currdatastatus.ATT_ALC_Threshold_L;
3017
-            CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL2_H,bluecell_Currdatastatus.ATT_UL2_L);
3018
-            uint16_t tempValue = 0;
3019
-            if(CurrnALC_MIN_SettingValue > ResdBm && CurrentATTENVALUE > 0){
3020
-                tempValue = (CurrentATTENVALUE*10);
3021
-                tempValue %= 10;
3022
-                if(tempValue > 0){
3023
-                    ALC_Result = CurrentATTENVALUE *10 -50;
3024
-                }else{
3025
-                    ALC_Result = CurrentATTENVALUE *10 -100;
3026
-                }
3027
-                 bluecell_Currdatastatus.ATT_UL2_H = ((ALC_Result & 0xFF00) >> 8);
3028
-                 bluecell_Currdatastatus.ATT_UL2_L = ALC_Result & 0x00FF;
3046
+                
3047
+            /***************************************************************************************************************/
3048
+            /*                                             ALC 3                                                           */
3049
+            /***************************************************************************************************************/              
3050
+            ret  = bluecell_Currdatastatus.DET_UL3_IN_H << 8;
3051
+            ret += bluecell_Currdatastatus.DET_UL3_IN_L;   
3052
+            ret *= Volt_Calc_val;
3053
+            ResdBm = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3054
+            Limitdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
3055
+            Limitdata +=  bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
3029 3056
 
3057
+            Limitdata /= 10;
3058
+
3059
+
3060
+            CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL3_H,bluecell_Currdatastatus.ATT_UL3_L);
3061
+            IwillGiveAtten = ALC_Calc(Limitdata,ResdBm);
3062
+            IwillGiveAtten *=10;
3063
+
3064
+            if((ResdBm > (Limitdata + 0.5)) || (ResdBm < (Limitdata - 0.5))){
3065
+                bluecell_Currdatastatus.ATT_UL3_H = ((IwillGiveAtten & 0xFF00) >> 8);
3066
+                bluecell_Currdatastatus.ATT_UL3_L = IwillGiveAtten & 0x00FF;
3030 3067
                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3031
-                
3032
-           }
3033
-        }
3034
-        if(bluecell_Currdatastatus.ATT_ALC3_ONOFF == true){
3035
-             ret  = bluecell_Currdatastatus.DET_UL3_IN_H << 8;
3036
-             ret += bluecell_Currdatastatus.DET_UL3_IN_L;   
3037
-             ret *= Volt_Calc_val;
3038
-             ResdBm = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3039
-#if 0 // PYJ.2020.05.14_BEGIN -- 
3040
-             CurrnALC_MAX_SettingValue = bluecell_Currdatastatus.ATT_ALC3_MAX_H << 8;
3041
-             CurrnALC_MAX_SettingValue += bluecell_Currdatastatus.ATT_ALC3_MAX_L;
3042
-             CurrnALC_MAX_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL3_IN_H,CurrnALC_MAX_SettingValue);
3043
-             ALC_Result  = ResdBm - CurrnALC_MAX_SettingValue;
3044
-             
3045
-             if(ALC_Result > 0){
3046
-                 ALC_Result *= 100;
3047
-                 ALC_Result +=  bluecell_Currdatastatus.ATT_UL3_H << 8 | bluecell_Currdatastatus.ATT_UL3_L;
3048
-                 bluecell_Currdatastatus.ATT_UL3_H =  ((ALC_Result & 0xFF00) >> 8);
3049
-                 bluecell_Currdatastatus.ATT_UL3_L =  ALC_Result & 0x00FF;               
3050
-                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3051
-             }
3052
-#endif // PYJ.2020.05.14_END -- 
3053
-             CurrnALC_MIN_SettingValue = bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8;
3054
-             CurrnALC_MIN_SettingValue += bluecell_Currdatastatus.ATT_ALC_Threshold_L;
3055
-             CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL3_H,bluecell_Currdatastatus.ATT_UL3_L);
3056
-             uint16_t tempValue = 0;
3057
-             if(CurrnALC_MIN_SettingValue > ResdBm && CurrentATTENVALUE > 0){
3058
-                 tempValue = (CurrentATTENVALUE*10);
3059
-                 tempValue %= 10;
3060
-                 if(tempValue > 0){
3061
-                     ALC_Result = CurrentATTENVALUE *10 -50;
3062
-                 }else{
3063
-                     ALC_Result = CurrentATTENVALUE *10 -100;
3064
-                 }
3065
-                  bluecell_Currdatastatus.ATT_UL3_H = ((ALC_Result & 0xFF00) >> 8);
3066
-                  bluecell_Currdatastatus.ATT_UL3_L = ALC_Result & 0x00FF;
3067
-            
3068
-                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3069
-                 
3070 3068
             }
3069
+            /***************************************************************************************************************/
3070
+            /*                                             ALC 4                                                           */
3071
+            /***************************************************************************************************************/  
3071 3072
 
3072
-        }
3073
-        if(bluecell_Currdatastatus.ATT_ALC4_ONOFF == true){
3074
-             ret  = bluecell_Currdatastatus.DET_UL4_IN_H << 8;
3075
-             ret += bluecell_Currdatastatus.DET_UL4_IN_L;   
3076
-             ret *= Volt_Calc_val;
3077
-             ResdBm = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3078
-#if 0 // PYJ.2020.05.14_BEGIN -- 
3079
-             CurrnALC_MAX_SettingValue = bluecell_Currdatastatus.ATT_ALC4_MAX_H << 8;
3080
-             CurrnALC_MAX_SettingValue += bluecell_Currdatastatus.ATT_ALC4_MAX_L;
3081
-             CurrnALC_MAX_SettingValue = MinusConvert(bluecell_Currdatastatus.DET_UL4_IN_H,CurrnALC_MAX_SettingValue);
3082
-             ALC_Result  = ResdBm - CurrnALC_MAX_SettingValue;
3083
-             if(ALC_Result > 0){
3084
-                 ALC_Result *= 100;
3085
-                 ALC_Result +=  bluecell_Currdatastatus.ATT_UL4_H << 8 | bluecell_Currdatastatus.ATT_UL4_L;
3086
-                 bluecell_Currdatastatus.ATT_UL4_H =  ((ALC_Result & 0xFF00) >> 8);
3087
-                 bluecell_Currdatastatus.ATT_UL4_L =  ALC_Result & 0x00FF;               
3088
-                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3089
-             }
3090
-#endif // PYJ.2020.05.14_END -- 
3091
-             
3092
-             CurrnALC_MIN_SettingValue = bluecell_Currdatastatus.ATT_ALC4_MIN_H << 8;
3093
-             CurrnALC_MIN_SettingValue += bluecell_Currdatastatus.ATT_ALC4_MIN_L;
3094
-             CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL4_H,bluecell_Currdatastatus.ATT_UL4_L);
3095
-             uint16_t tempValue = 0;
3096
-             if(CurrnALC_MIN_SettingValue > ResdBm && CurrentATTENVALUE > 0){
3097
-                 tempValue = (CurrentATTENVALUE*10);
3098
-                 tempValue %= 10;
3099
-                 if(tempValue > 0){
3100
-                     ALC_Result = CurrentATTENVALUE *10 -50;
3101
-                 }else{
3102
-                     ALC_Result = CurrentATTENVALUE *10 -100;
3103
-                 }
3104
-                  bluecell_Currdatastatus.ATT_UL4_H = ((ALC_Result & 0xFF00) >> 8);
3105
-                  bluecell_Currdatastatus.ATT_UL4_L = ALC_Result & 0x00FF;
3106
-            
3107
-                 CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3108
-                 
3109
-            }
3073
+            ret  = bluecell_Currdatastatus.DET_UL4_IN_H << 8;
3074
+            ret += bluecell_Currdatastatus.DET_UL4_IN_L;   
3075
+            ret *= Volt_Calc_val;
3076
+            ResdBm = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3077
+            Limitdata = (( bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00) ;
3078
+            Limitdata +=  bluecell_Currdatastatus.DLI_Level_High_Threshold_L ;
3110 3079
 
3111
-        }
3080
+            Limitdata /= 10;
3081
+
3082
+
3083
+            CurrentATTENVALUE = PE43711_Double(bluecell_Currdatastatus.ATT_UL4_H,bluecell_Currdatastatus.ATT_UL4_L);
3084
+            IwillGiveAtten = ALC_Calc(Limitdata,ResdBm);
3085
+            IwillGiveAtten *=10;
3086
+
3087
+            if((ResdBm > (Limitdata + 0.5)) || (ResdBm < (Limitdata - 0.5))){
3088
+                bluecell_Currdatastatus.ATT_UL4_H = ((IwillGiveAtten & 0xFF00) >> 8);
3089
+                bluecell_Currdatastatus.ATT_UL4_L = IwillGiveAtten & 0x00FF;
3090
+                CompareAttenData(bluecell_Currdatastatus,bluecell_Prevdatastatus);
3091
+            }
3112 3092
         ALCTimerCnt = 0;
3093
+        }
3113 3094
     }
3114 3095
 }
3115 3096
 //-15 ~ -5
@@ -3240,163 +3221,223 @@ void Alarm_Check(){
3240 3221
     double Volt_Calc_val = 3.3 / 4095;
3241 3222
     double ret = 0;
3242 3223
     int8_t ResdBm[4] = {0,};
3243
-#if 0 // PYJ.2020.05.18_BEGIN -- 
3244
-    if(bluecell_Currdatastatus.ALARM_MASK1 != true)
3224
+    if(bluecell_Currdatastatus.ALARM_MASK1 == false)
3245 3225
         return;
3246
-#endif // PYJ.2020.05.18_END -- 
3226
+
3227
+    if(bluecell_Currdatastatus.ALARM_TEMP_HIGH             > 0 
3228
+    || bluecell_Currdatastatus.ALARM_DLI_Level             > 0
3229
+    || bluecell_Currdatastatus.ALARM_DLI_AGC_SHTUTDOWN     > 0
3230
+    || bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm         > 0
3231
+    || bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm         > 0
3232
+    || bluecell_Currdatastatus.ALARM_ULO_Level             > 0
3233
+    || bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN     > 0){
3234
+        AlarmTimerSet = true;
3235
+    }else{
3236
+        AlarmTimerSet = false;
3237
+    }
3247 3238
 
3248 3239
     /******************************TEMP START*******************************************/ 
3249
-    if(bluecell_Currdatastatus.Temp_High_Threshold > bluecell_Currdatastatus.DET_TEMP){
3250
-        bluecell_Currdatastatus.ALARM_TEMP_HIGH == ENVIRONMENT_TEMPHIGH;
3240
+    if(bluecell_Currdatastatus.Temp_High_Threshold < (bluecell_Currdatastatus.DET_TEMP )){
3241
+        bluecell_Currdatastatus.ALARM_TEMP_HIGH |= ENVIRONMENT_TEMPHIGH;
3242
+        
3243
+    }else{
3244
+        bluecell_Currdatastatus.ALARM_TEMP_HIGH &= ~ENVIRONMENT_TEMPHIGH;
3245
+        
3251 3246
     }
3252 3247
     /******************************TEMP END*******************************************/ 
3253 3248
 
3254 3249
     /******************************ULO LEVEL START*******************************************/ 
3255 3250
 
3256
-    temp = ((bluecell_Currdatastatus.ULO_Level_High_Threshold_H << 8) & 0xFF00);
3257
-    temp += (bluecell_Currdatastatus.ULO_Level_High_Threshold_L & 0x00FF);
3258
-    
3259
-    ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3260
-    ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3261
-    ret *= Volt_Calc_val;
3262
-    ResdBm[0] = AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3263
-    ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3264
-    ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3265
-    ret *= Volt_Calc_val;
3266
-    ResdBm[1] = AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3267
-
3268
-    ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3269
-    ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3270
-    ret *= Volt_Calc_val;
3271
-    ResdBm[2] = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3272
-    ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3273
-    ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3274
-    ret *= Volt_Calc_val;
3275
-    ResdBm[3] = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3276
-    
3277
-    /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3278
-    if(temp > ResdBm[0]){
3279
-        bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P1_LEVEL_HIGH;
3280
-    }
3281
-    if( temp > ResdBm[1]){
3282
-        bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P2_LEVEL_HIGH;
3283
-    }
3284
-    if(temp > ResdBm[2]){
3285
-        bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P3_LEVEL_HIGH;
3286
-    }
3287
-    if(temp > ResdBm[3]){
3288
-        bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P4_LEVEL_HIGH;
3289
-    }
3290
-    /******************************ULO LEVEL END*******************************************/ 
3291
-    /******************************ULO ALC Start*******************************************/ 
3292
-    temp = ((bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8) & 0xFF00);
3293
-    temp += (bluecell_Currdatastatus.ATT_ALC_Threshold_L & 0x00FF);
3294
-    if(temp > ResdBm[0]){
3295
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ALC_P1;
3296
-    }
3297
-    if( temp > ResdBm[1]){
3298
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ALC_P2;
3299
-    }
3300
-    if(temp > ResdBm[2]){
3301
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ALC_P3;
3302
-    }
3303
-    if(temp > ResdBm[3]){
3304
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ALC_P4;
3305
-    }
3306
-    /******************************ULO ALC END*******************************************/ 
3307
-    temp = ((bluecell_Currdatastatus.ULO_Shutdown_Threshold_H << 8) & 0xFF00);
3308
-    temp += (bluecell_Currdatastatus.ULO_Shutdown_Threshold_L & 0x00FF);    
3309
-    if(temp > ResdBm[0]){
3310
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P1;
3311
-    }
3312
-    if( temp > ResdBm[1]){
3313
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P2;
3314
-    }
3315
-    if(temp > ResdBm[2]){
3316
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P3;
3317
-    }
3318
-    if(temp > ResdBm[3]){
3319
-        bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P4;
3320
-    }
3251
+    if(bluecell_Currdatastatus.ULO_ALC_ON_OFF == true){
3252
+        temp = ((bluecell_Currdatastatus.ULO_Level_High_Threshold_H << 8) & 0xFF00);
3253
+        temp += (bluecell_Currdatastatus.ULO_Level_High_Threshold_L & 0x00FF);
3254
+        
3255
+        ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3256
+        ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3257
+        ret *= Volt_Calc_val;
3258
+        ResdBm[0] = AutoControl_ADC_Compare(ret,&Det_UL1.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3259
+        ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3260
+        ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3261
+        ret *= Volt_Calc_val;
3262
+        ResdBm[1] = AutoControl_ADC_Compare(ret,&Det_UL2.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3263
+
3264
+        ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3265
+        ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3266
+        ret *= Volt_Calc_val;
3267
+        ResdBm[2] = AutoControl_ADC_Compare(ret,&Det_UL3.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3268
+        ret  = bluecell_Currdatastatus.DET_UL1_IN_H << 8;
3269
+        ret += bluecell_Currdatastatus.DET_UL1_IN_L;   
3270
+        ret *= Volt_Calc_val;
3271
+        ResdBm[3] = AutoControl_ADC_Compare(ret,&Det_UL4.Table_Det_15_dBm_H,sizeof(DET_TABLEUL_st));
3272
+        
3273
+     /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3274
+        if(temp > ResdBm[0]){
3275
+             printf("ULO_ALC_Alarm1 OCCUR\r\n");
3276
+            bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P1_LEVEL_HIGH;
3277
+            bluecell_Currdatastatus.ULO_ALC_Alarm1  = true;
3278
+        }else{
3279
+            bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P1_LEVEL_HIGH;
3280
+            bluecell_Currdatastatus.ULO_ALC_Alarm1  = false;
3321 3281
 
3322
-    /******************************DLI LEVEL START*******************************************/ 
3282
+        }
3283
+        if( temp > ResdBm[1]){
3284
+            printf("ULO_ALC_Alarm2 OCCUR\r\n");
3285
+            bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P2_LEVEL_HIGH;
3286
+            bluecell_Currdatastatus.ULO_ALC_Alarm2  = true;        
3287
+        }else{
3288
+            bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P2_LEVEL_HIGH;
3289
+            bluecell_Currdatastatus.ULO_ALC_Alarm2  = false;        
3323 3290
 
3324
-    ret  = bluecell_Currdatastatus.DET_DL1_IN_H << 8;
3325
-    ret += bluecell_Currdatastatus.DET_DL1_IN_L;   
3326
-    ret *= Volt_Calc_val;
3327
-    ResdBm[0] = AutoControl_ADC_Compare(ret,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3328
-
3329
-    ret  = bluecell_Currdatastatus.DET_DL2_IN_H << 8;
3330
-    ret += bluecell_Currdatastatus.DET_DL2_IN_L;   
3331
-    ret *= Volt_Calc_val;
3332
-    ResdBm[1] = AutoControl_ADC_Compare(ret,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3333
-
3334
-    ret  = bluecell_Currdatastatus.DET_DL3_IN_H << 8;
3335
-    ret += bluecell_Currdatastatus.DET_DL3_IN_L;   
3336
-    ret *= Volt_Calc_val;
3337
-    ResdBm[2] = AutoControl_ADC_Compare(ret,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3338
-
3339
-    ret  = bluecell_Currdatastatus.DET_DL4_IN_H << 8;
3340
-    ret += bluecell_Currdatastatus.DET_DL4_IN_L;   
3341
-    ret *= Volt_Calc_val;
3342
-    ResdBm[3] = AutoControl_ADC_Compare(ret,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3343
-
3344
-    temp = ((bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00);
3345
-    temp += (bluecell_Currdatastatus.DLI_Level_High_Threshold_L & 0x00FF);
3346
-    /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3347
-    if(temp < ResdBm[0]){
3348
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_HIGH;
3349
-    }
3350
-    if( temp < ResdBm[1]){
3351
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_HIGH;
3352
-    }
3353
-    if(temp < ResdBm[2]){
3354
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_HIGH;
3355
-    }
3356
-    if(temp < ResdBm[3]){
3357
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_HIGH;
3358
-    }
3291
+        }
3292
+        if(temp > ResdBm[2]){
3293
+            printf("ULO_ALC_Alarm3 OCCUR\r\n");
3294
+            bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P3_LEVEL_HIGH;
3295
+            bluecell_Currdatastatus.ULO_ALC_Alarm3  = true;        
3296
+        }else{
3297
+            bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P3_LEVEL_HIGH;
3298
+            bluecell_Currdatastatus.ULO_ALC_Alarm3  = false;        
3359 3299
 
3360
-    temp = ((bluecell_Currdatastatus.DLI_Level_Low_Threshold_H << 8) & 0xFF00);
3361
-    temp += (bluecell_Currdatastatus.DLI_Level_Low_Threshold_L & 0x00FF);
3362
-    /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3363
-    if(temp > ResdBm[0]){
3364
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_HIGH;
3365
-    }
3366
-    if( temp > ResdBm[1]){
3367
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_HIGH;
3368
-    }
3369
-    if(temp > ResdBm[2]){
3370
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_HIGH;
3300
+        }
3301
+        if(temp > ResdBm[3]){
3302
+            printf("ULO_ALC_Alarm4 OCCUR\r\n");
3303
+            bluecell_Currdatastatus.ALARM_ULO_Level |= ALARM_ULO_P4_LEVEL_HIGH;
3304
+            bluecell_Currdatastatus.ULO_ALC_Alarm4  = true;        
3305
+        }else{
3306
+            bluecell_Currdatastatus.ALARM_ULO_Level &= ~ALARM_ULO_P4_LEVEL_HIGH;
3307
+            bluecell_Currdatastatus.ULO_ALC_Alarm4  = false;        
3308
+        }
3309
+        /******************************ULO LEVEL END*******************************************/ 
3310
+        /******************************ULO ALC Start*******************************************/ 
3311
+        temp = ((bluecell_Currdatastatus.ATT_ALC_Threshold_H << 8) & 0xFF00);
3312
+        temp += (bluecell_Currdatastatus.ATT_ALC_Threshold_L & 0x00FF);
3313
+        if(temp > ResdBm[0]){
3314
+            bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P1;
3315
+        }
3316
+        if( temp > ResdBm[1]){
3317
+            bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P2;
3318
+        }
3319
+        if(temp > ResdBm[2]){
3320
+            bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P3;
3321
+        }
3322
+        if(temp > ResdBm[3]){
3323
+            bluecell_Currdatastatus.ALARM_ULO_ALC_Alarm |= ALARM_ALC_P4;
3324
+        }
3325
+        /******************************ULO ALC END*******************************************/ 
3326
+        temp = ((bluecell_Currdatastatus.ULO_Shutdown_Threshold_H << 8) & 0xFF00);
3327
+        temp += (bluecell_Currdatastatus.ULO_Shutdown_Threshold_L & 0x00FF);    
3328
+        if(temp > ResdBm[0]){
3329
+            bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P1;
3330
+        }
3331
+        if( temp > ResdBm[1]){
3332
+            bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P2;
3333
+        }
3334
+        if(temp > ResdBm[2]){
3335
+            bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P3;
3336
+        }
3337
+        if(temp > ResdBm[3]){
3338
+            bluecell_Currdatastatus.ALARM_ULO_ALC_SHTUTDOWN |= ALARM_ULO_SHUTDOWN_P4;
3339
+        }
3371 3340
     }
3372
-    if(temp > ResdBm[3]){
3373
-        bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_HIGH;
3374
-    }    
3375
-    /******************************DLI LEVEL END*******************************************/     
3376
-    /******************************DLI AGC START******************************************/     
3377
-    
3341
+    /******************************DLI LEVEL START*******************************************/ 
3342
+    if(bluecell_Currdatastatus.DLI_AGC_ON_OFF == true){
3343
+        ret  = bluecell_Currdatastatus.DET_DL1_IN_H << 8;
3344
+        ret += bluecell_Currdatastatus.DET_DL1_IN_L;   
3345
+        ret *= Volt_Calc_val;
3346
+        ResdBm[0] = AutoControl_ADC_Compare(ret,&Det_DL1.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3347
+
3348
+        ret  = bluecell_Currdatastatus.DET_DL2_IN_H << 8;
3349
+        ret += bluecell_Currdatastatus.DET_DL2_IN_L;   
3350
+        ret *= Volt_Calc_val;
3351
+        ResdBm[1] = AutoControl_ADC_Compare(ret,&Det_DL2.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3352
+
3353
+        ret  = bluecell_Currdatastatus.DET_DL3_IN_H << 8;
3354
+        ret += bluecell_Currdatastatus.DET_DL3_IN_L;   
3355
+        ret *= Volt_Calc_val;
3356
+        ResdBm[2] = AutoControl_ADC_Compare(ret,&Det_DL3.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3357
+
3358
+        ret  = bluecell_Currdatastatus.DET_DL4_IN_H << 8;
3359
+        ret += bluecell_Currdatastatus.DET_DL4_IN_L;   
3360
+        ret *= Volt_Calc_val;
3361
+        ResdBm[3] = AutoControl_ADC_Compare(ret,&Det_DL4.Table_Det5_dBm_H,sizeof(DET_TABLEUL_st));
3362
+
3363
+        temp = ((bluecell_Currdatastatus.DLI_Level_High_Threshold_H << 8) & 0xFF00);
3364
+        temp += (bluecell_Currdatastatus.DLI_Level_High_Threshold_L & 0x00FF);
3365
+        /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3366
+        if(temp < ResdBm[0]){
3367
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_HIGH;
3368
+        }
3369
+        if( temp < ResdBm[1]){
3370
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_HIGH;
3371
+        }
3372
+        if(temp < ResdBm[2]){
3373
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_HIGH;
3374
+        }
3375
+        if(temp < ResdBm[3]){
3376
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_HIGH;
3377
+        }
3378
+
3379
+#if 0 // PYJ.2020.05.20_BEGIN -- 
3380
+        temp = ((bluecell_Currdatastatus.DLI_Level_Low_Threshold_H << 8) & 0xFF00);
3381
+        temp += (bluecell_Currdatastatus.DLI_Level_Low_Threshold_L & 0x00FF);
3382
+        /*4개의 디텍 중에 한개라도 상한치를 넘었을 경우 알림 */
3383
+        if(temp > ResdBm[0]){
3384
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P1_LEVEL_HIGH;
3385
+        }
3386
+        if( temp > ResdBm[1]){
3387
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P2_LEVEL_HIGH;
3388
+        }
3389
+        if(temp > ResdBm[2]){
3390
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P3_LEVEL_HIGH;
3391
+        }
3392
+        if(temp > ResdBm[3]){
3393
+            bluecell_Currdatastatus.ALARM_DLI_Level |= ALARM_DLI_P4_LEVEL_HIGH;
3394
+        }    
3395
+#endif // PYJ.2020.05.20_END -- 
3396
+        /******************************DLI LEVEL END*******************************************/     
3397
+        /******************************DLI AGC START******************************************/     
3398
+        
3378 3399
 
3379
-    
3380
-    temp = ((bluecell_Currdatastatus.ATT_DL1_H << 8) & 0xFF00);
3381
-    temp += (bluecell_Currdatastatus.ATT_DL1_L & 0x00FF);
3382
-    temp /= 10;
3383
-    if(temp >= 15){
3384
-        printf("ALARM_AGC_P1 OCCUR\r\n");
3385
-        bluecell_Currdatastatus.DLI_AGC_Alarm1 |= ALARM_AGC_P1;
3386
-    }
3387
-    if( temp < ResdBm[1]){
3388
-        bluecell_Currdatastatus.DLI_AGC_Alarm2 |= ALARM_AGC_P2;
3389
-    }
3390
-    if(temp < ResdBm[2]){
3391
-        bluecell_Currdatastatus.DLI_AGC_Alarm3 |= ALARM_AGC_P3;
3400
+        
3401
+        temp = ((bluecell_Currdatastatus.ATT_DL1_H << 8) & 0xFF00);
3402
+        temp += (bluecell_Currdatastatus.ATT_DL1_L & 0x00FF);
3403
+        temp /= 10;
3404
+        if(temp >= 15){
3405
+            printf("ALARM_AGC_P1 OCCUR\r\n");
3406
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P1;
3407
+            bluecell_Currdatastatus.DLI_AGC_Alarm1       = true;
3408
+        }else{
3409
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P1;
3410
+        }
3411
+        if( temp < ResdBm[1]){
3412
+            printf("ALARM_AGC_P2 OCCUR\r\n");
3413
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P2;
3414
+            bluecell_Currdatastatus.DLI_AGC_Alarm2       = true;
3415
+        }else{
3416
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P2;
3417
+            bluecell_Currdatastatus.DLI_AGC_Alarm2       = false;
3418
+
3419
+        }
3420
+        if(temp < ResdBm[2]){
3421
+            printf("ALARM_AGC_P3 OCCUR\r\n");
3422
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P3;
3423
+            bluecell_Currdatastatus.DLI_AGC_Alarm3       = true;    
3424
+        }else{
3425
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P3;
3426
+            bluecell_Currdatastatus.DLI_AGC_Alarm3       = false;
3427
+
3428
+        }
3429
+        if(temp < ResdBm[3]){
3430
+            printf("ALARM_AGC_P4 OCCUR\r\n");
3431
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm |= ALARM_AGC_P4;
3432
+            bluecell_Currdatastatus.DLI_AGC_Alarm4       = true;    
3433
+        }else{
3434
+            bluecell_Currdatastatus.ALARM_DLI_AGC_Alarm &= ~ALARM_AGC_P4;
3435
+            bluecell_Currdatastatus.DLI_AGC_Alarm4       = false;
3436
+
3437
+        }
3392 3438
     }
3393
-    if(temp < ResdBm[3]){
3394
-        bluecell_Currdatastatus.DLI_AGC_Alarm4 |= ALARM_AGC_P4;
3395
-    }   
3396 3439
     /******************************DLI AGC END******************************************/     
3397 3440
     /******************************DLI ShutDown Start******************************************/     
3398
-
3399
-
3400 3441
     temp = ((bluecell_Currdatastatus.DLI_Shutdown_Threshold_H << 8) & 0xFF00);
3401 3442
     temp += (bluecell_Currdatastatus.DLI_Shutdown_Threshold_L & 0x00FF);
3402 3443
 

+ 4 - 4
Inc/main.h

@@ -71,8 +71,8 @@ extern I2C_HandleTypeDef hi2c2;
71 71
 /* USER CODE END EFP */
72 72
 
73 73
 /* Private defines -----------------------------------------------------------*/
74
-#define LED_FAIL_Pin GPIO_PIN_3
75
-#define LED_FAIL_GPIO_Port GPIOE
74
+#define LED_ACT_Pin GPIO_PIN_3
75
+#define LED_ACT_GPIO_Port GPIOE
76 76
 #define FAIL_MBIC_Pin GPIO_PIN_4
77 77
 #define FAIL_MBIC_GPIO_Port GPIOE
78 78
 #define BOOT_LED_Pin GPIO_PIN_15
@@ -127,8 +127,8 @@ extern I2C_HandleTypeDef hi2c2;
127 127
 #define PATH_EN_DL2_GPIO_Port GPIOD
128 128
 #define PATH_EN_UL2_Pin GPIO_PIN_11
129 129
 #define PATH_EN_UL2_GPIO_Port GPIOD
130
-#define LED_ACT_Pin GPIO_PIN_14
131
-#define LED_ACT_GPIO_Port GPIOD
130
+#define LED_FAIL_Pin GPIO_PIN_14
131
+#define LED_FAIL_GPIO_Port GPIOD
132 132
 #define ATT_EN_DL3_Pin GPIO_PIN_2
133 133
 #define ATT_EN_DL3_GPIO_Port GPIOG
134 134
 #define ATT_EN_UL3_Pin GPIO_PIN_3

+ 2 - 2
STM32F103ZET_JDASMBIC.ioc

@@ -284,7 +284,7 @@ PD11.GPIO_Label=PATH_EN_UL2
284 284
 PD11.Locked=true
285 285
 PD11.Signal=GPIO_Output
286 286
 PD14.GPIOParameters=GPIO_Label
287
-PD14.GPIO_Label=LED_ACT
287
+PD14.GPIO_Label=LED_FAIL
288 288
 PD14.Locked=true
289 289
 PD14.Signal=GPIO_Output
290 290
 PD15.Locked=true
@@ -330,7 +330,7 @@ PE15.GPIO_Label=PATH_EN_UL4
330 330
 PE15.Locked=true
331 331
 PE15.Signal=GPIO_Output
332 332
 PE3.GPIOParameters=GPIO_Label
333
-PE3.GPIO_Label=LED_FAIL
333
+PE3.GPIO_Label=LED_ACT
334 334
 PE3.Locked=true
335 335
 PE3.Signal=GPIO_Output
336 336
 PE4.GPIOParameters=GPIO_Label

+ 25 - 14
Src/main.c

@@ -75,6 +75,9 @@ volatile uint32_t UartRxTimerCnt = 0;
75 75
 volatile uint32_t LDTimerCnt = 0;
76 76
 volatile uint32_t ALCTimerCnt = 0;
77 77
 volatile uint32_t AGCTimerCnt = 0;
78
+volatile bool     AlarmTimerSet = 0;
79
+volatile uint32_t AlarmTimerCnt = 0;
80
+
78 81
 
79 82
 
80 83
 /* USER CODE END PV */
@@ -118,7 +121,7 @@ uint16_t adc3cnt = 0 ;
118 121
 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
119 122
 {
120 123
 //?��?��?�� 코드 ?��?��
121
-//諤嵸烄 ?嚙踝蕭?嚙踝蕭 adc?嚙踝蕭嚙?????????? 嚙???????????嚙踝蕭?嚙踝蕭 ?嚙踝蕭 ?嚙踝蕭?嚙踝蕭嚙?????????? ?嚙踝蕭?嚙踝蕭嚙?????????? ?嚙踝蕭?嚙踝蕭?? 穈軤𦚯 魽國探嚙?????????? ?嚙踝蕭?嚙踝蕭
124
+//만약 ?��?�� adc?���?????????? �???????????��?�� ?�� ?��?���?????????? ?��?���?????????? ?��?��?? 같이 조건�?????????? ?��?��
122 125
 
123 126
     if(hadc->Instance == hadc1.Instance)
124 127
     {
@@ -261,6 +264,8 @@ void eepromtest_j1(){
261 264
 extern void ALC_Function();
262 265
 extern void Boot_LED_Toggle(void);
263 266
 extern void ADC_Check(void);
267
+extern void Booting_LED_Check(void);
268
+
264 269
 /* USER CODE END 0 */
265 270
 
266 271
 /**
@@ -312,6 +317,14 @@ int main(void)
312 317
   PE43711_PinInit();
313 318
   EEPROM_M24C08_Init();
314 319
   Bluecell_DataInit();
320
+#if 1 // PYJ.2020.05.06_BEGIN -- 
321
+    printf("****************************************\r\n");
322
+    printf("MBIC Project\r\n");
323
+    printf("Build at %s %s\r\n", __DATE__, __TIME__);
324
+    printf("Copyright (c) 2020. BLUECELL\r\n");
325
+    printf("****************************************\r\n");
326
+#endif // PYJ.2020.05.06_END --   
327
+  Booting_LED_Check();
315 328
 #if 0 // PYJ.2020.04.22_BEGIN -- 
316 329
   EEPROM_M24C08_write(0xA0,0,i2cTestData,1);
317 330
   printf("i2c Test Data1 %d\r\n",i2ctest[0]);
@@ -328,13 +341,7 @@ int main(void)
328 341
 //    EEPROMTEST_J();
329 342
 //    eepromtest_j1();
330 343
 //        eepromtest_j1();
331
-#if 1 // PYJ.2020.05.06_BEGIN -- 
332
-    printf("****************************************\r\n");
333
-    printf("MBIC Project\r\n");
334
-    printf("Build at %s %s\r\n", __DATE__, __TIME__);
335
-    printf("Copyright (c) 2020. BLUECELL\r\n");
336
-    printf("****************************************\r\n");
337
-#endif // PYJ.2020.05.06_END -- 
344
+
338 345
 
339 346
   while (1)
340 347
   {
@@ -750,7 +757,7 @@ static void MX_GPIO_Init(void)
750 757
   __HAL_RCC_GPIOD_CLK_ENABLE();
751 758
 
752 759
   /*Configure GPIO pin Output Level */
753
-  HAL_GPIO_WritePin(GPIOE, LED_FAIL_Pin|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
760
+  HAL_GPIO_WritePin(GPIOE, LED_ACT_Pin|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
754 761
                           |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin, GPIO_PIN_RESET);
755 762
 
756 763
   /*Configure GPIO pin Output Level */
@@ -767,12 +774,12 @@ static void MX_GPIO_Init(void)
767 774
                           |ATT_EN_DL1_Pin, GPIO_PIN_RESET);
768 775
 
769 776
   /*Configure GPIO pin Output Level */
770
-  HAL_GPIO_WritePin(GPIOD, PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15 
777
+  HAL_GPIO_WritePin(GPIOD, PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_FAIL_Pin|GPIO_PIN_15 
771 778
                           |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin, GPIO_PIN_RESET);
772 779
 
773
-  /*Configure GPIO pins : LED_FAIL_Pin FAIL_MBIC_Pin ATT_CLOCK4_Pin ATT_DATA4_Pin 
780
+  /*Configure GPIO pins : LED_ACT_Pin FAIL_MBIC_Pin ATT_CLOCK4_Pin ATT_DATA4_Pin 
774 781
                            ATT_EN_DL4_Pin ATT_EN_UL4_Pin PATH_EN_DL4_Pin PATH_EN_UL4_Pin */
775
-  GPIO_InitStruct.Pin = LED_FAIL_Pin|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
782
+  GPIO_InitStruct.Pin = LED_ACT_Pin|FAIL_MBIC_Pin|ATT_CLOCK4_Pin|ATT_DATA4_Pin 
776 783
                           |ATT_EN_DL4_Pin|ATT_EN_UL4_Pin|PATH_EN_DL4_Pin|PATH_EN_UL4_Pin;
777 784
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
778 785
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -808,9 +815,9 @@ static void MX_GPIO_Init(void)
808 815
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
809 816
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
810 817
 
811
-  /*Configure GPIO pins : PATH_EN_DL2_Pin PATH_EN_UL2_Pin LED_ACT_Pin PD15 
818
+  /*Configure GPIO pins : PATH_EN_DL2_Pin PATH_EN_UL2_Pin LED_FAIL_Pin PD15 
812 819
                            ATT_CLOCK2_Pin ATT_DATA2_Pin ATT_EN_DL2_Pin ATT_EN_UL2_Pin */
813
-  GPIO_InitStruct.Pin = PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_ACT_Pin|GPIO_PIN_15 
820
+  GPIO_InitStruct.Pin = PATH_EN_DL2_Pin|PATH_EN_UL2_Pin|LED_FAIL_Pin|GPIO_PIN_15 
814 821
                           |ATT_CLOCK2_Pin|ATT_DATA2_Pin|ATT_EN_DL2_Pin|ATT_EN_UL2_Pin;
815 822
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
816 823
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -847,6 +854,10 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
847 854
       LDTimerCnt++;
848 855
       ALCTimerCnt++;
849 856
       AGCTimerCnt++;
857
+      if(AlarmTimerSet == true)
858
+        AlarmTimerCnt++;
859
+      else
860
+        AlarmTimerCnt = 0;
850 861
   }
851 862
   /* USER CODE END Callback 1 */
852 863
 }