Browse Source

[Improve][Modularization][Module_CCS]

2022.03.07 / Folus Wen

Actions:
  1. modify charging remain time.
  2. reduce SLAC waiting time to 20s for AC.
  3. set AC phase according to model name.
  4. add delay to while loop.
  5. DC CCS /Storage file system change from jffs2 to ubifs.
  6. DC CCS reboot system after upgrade firmware success.

Files:
  1. exi_engine\api\api.c
  2. SeccComm.c
  3. SeccComm.c
  4. CsuComm.c

Image version: V0.28.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 3 years ago
parent
commit
301faa0047

BIN
EVSE/Projects/AW-CCS/Apps/CCS/CsuComm


+ 4 - 1
EVSE/Projects/AW-CCS/Apps/CCS/CsuComm.c

@@ -2301,6 +2301,9 @@ int Proc_DownloadFinishRes(int Fd)
         sleep(2);
         //system("killall FWUpdate");
         CSUCOMMDC_TASK_FLAG.Got_DownloadFinishReq = FALSE;
+		
+		Reboot_Process();
+		
         return nbytes;
     }
 }
@@ -3328,7 +3331,7 @@ int CsuCommAC_Proc()
     while(1)
     {
         CsuCommAC_SHM_Rx_Update();
-	usleep(100000);
+        usleep(100000);
     }
 }
 #endif

BIN
EVSE/Projects/AW-CCS/Apps/CCS/SeccComm


+ 16 - 6
EVSE/Projects/AW-CCS/Apps/CCS/SeccComm.c

@@ -1477,7 +1477,7 @@ void CP_Detection()
 
         #if ((CCS_ENERGY_TRANSFER_MODE == MODE_AC_SINGLE_PHASE_CORE) || (CCS_ENERGY_TRANSFER_MODE == MODE_AC_THREE_PHASE_CORE))
         {
-	    usleep(100000);
+        	usleep(100000);
             ccs->CpVoltage = ShmInternalComm->AC_CpPositiveVoltage;
             ccs->CpState = ShmInternalComm->AC_CpPresentState;
         }
@@ -2044,7 +2044,7 @@ void Error_Monitor()
             Update_V2G_Flow_Status(Other_Fault);
             End_Process();
         }
-	usleep(100000);
+		usleep(100000);
     }//while
 }
 
@@ -4221,8 +4221,8 @@ int SlacComm()
                             PwmStartTime = time(NULL);
                         }
                         else
-                        {
-                            if((time(NULL) - PwmStartTime) > TT_EVSE_SLAC_init)
+                        { 
+                            if((time(NULL) - PwmStartTime) > ((CCS_ENERGY_TRANSFER_MODE<=1)?20:TT_EVSE_SLAC_init))
                             {
                                 sprintf(buf_log_evcomm,
                                         "SlacComm: Wait CM_SLAC_PARM_REQ Timeout - TT_EVSE_SLAC_init, NowTime(%d)-PwmStartTime(%d)>%d (sec)",
@@ -17800,8 +17800,18 @@ int main(int argc, char *argv[])
 
     //Init Energy transfer mode
     //[To-Do] Parsing Model Name
-    ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
-
+    if(CCS_ENERGY_TRANSFER_MODE<=1)
+    {
+    	if((ShmInternalComm->AC_EVSEModelName[2]=='Y') || (ShmInternalComm->AC_EVSEModelName[2]=='D') || (ShmInternalComm->AC_EVSEModelName[2]=='W'))
+		//if(ShmSysConfigAndInfo->SysConfig.AcPhaseCount==3)
+    		ShmCcsData->EnergyTransferMode = MODE_AC_THREE_PHASE_CORE;
+		else
+			ShmCcsData->EnergyTransferMode = MODE_AC_SINGLE_PHASE_CORE;
+    }
+    else	
+    	ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
+   
+	
     struct ChargingInfoData *ccs;
     ccs = &ShmSysConfigAndInfo->SysInfo.CcsChargingData[0];
 

+ 1 - 1
EVSE/Projects/AW-CCS/Apps/CCS/define.h

@@ -52,7 +52,7 @@
 /**************************************************************************************/
 #ifdef AWCCS
 #undef CONNECTOR_TEMP_DETECTION
-#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE //MODE_AC_THREE_PHASE_CORE
+#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE 
 #else
 #define CCS_ENERGY_TRANSFER_MODE                    MODE_DC_EXTENDED
 #endif

+ 24 - 4
EVSE/Projects/AW-CCS/Apps/CCS/exi_engine/api/api.c

@@ -1925,7 +1925,7 @@ GLOBAL VARIABLES:
 void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocument *exi_doc_DIN, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_DIN70121 *shm_msg;
     struct dinCurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2005,13 +2005,23 @@ void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocumen
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk =  DIN70121PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
 
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
+	
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;
 	//shm_msg->EVTargetVoltage.Unit = (unsigned char) exi->EVTargetVoltage.Unit;
@@ -2048,7 +2058,7 @@ GLOBAL VARIABLES:
 void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocument *exi_doc_ISO1, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_ISO15118_2014 *shm_msg;
     struct iso1CurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2133,12 +2143,22 @@ void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocum
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk = ISO151182014PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
+	
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
 
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;

+ 16 - 2
EVSE/Projects/AW-CCS/Apps/CCS/version.h

@@ -5,7 +5,7 @@
                      initiated by Joseph D. Anderson
                            (since 2019/12/03)
 =============================================================================*/
-#define FIRMWARE_VERSION            "V0.27.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
+#define FIRMWARE_VERSION            "V0.28.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
 #define HARDWARE_VERSION            "CCS_8.0x"      //8-Byte(ASCII Code): CSU-03-RW, CCS_Board, REV:5.0
 #define LINUX_IMAGE_VERSION         "dd2da761d59f2cdd4064c9d95f8c302a442d33f3 (2019-01-04)"
 #define RTC_DEFAULT_TIME            1595486300      //Epoch time (decimal)
@@ -58,8 +58,22 @@ S: CCS Board
 ================================================================================
 ====================== [Software] Version History (2020) =======================
 ================================================================================
+[VERSION] V0.28.S0
+* Release Date: 2022-03-01
+* Change:
+  1. modify charging remain time 
+  2. reduce SLAC waiting time to 20s for AC
+  3. set AC phase according to model name
+  4. add delay to while loop
+* File
+  1. exi_engine\api\api.c
+  2. SeccComm.c
+  3. SeccComm.c
+  4. CsuComm.c, 
+  
+  
 [VERSION] V0.27.S0
-* Release Date: 2020-08-
+* Release Date: 2021-12-
 * Change:
   1. change Isolation test state to valid if recevied invalid during precharge and charging
   2. Add CM_AMP_MAP message 

+ 5 - 2
EVSE/Projects/AX80/Apps/CCS/CsuComm.c

@@ -582,7 +582,7 @@ int ShareMemory_Init()
     //memset(ShmInternalCommAC, 0, sizeof(struct InternalCommAC));
     #endif
    
-    //creat ShmSDispenser
+    //creat ShmDispenser
    	if ((MeterSMId = shmget(ShmDispenserKey, sizeof(struct DISPENSER),  0777)) < 0)
     {
    		SAVE_SYS_LOG_MSG_CSUCOMM("shmget ShmDispenser NG\n");
@@ -2301,6 +2301,9 @@ int Proc_DownloadFinishRes(int Fd)
         sleep(2);
         //system("killall FWUpdate");
         CSUCOMMDC_TASK_FLAG.Got_DownloadFinishReq = FALSE;
+		
+		Reboot_Process();
+		
         return nbytes;
     }
 }
@@ -3022,7 +3025,7 @@ int CsuCommAC_SHM_Rx_Update()
     // -------- [11] GridVoltage (EVSENominalVoltage) --------
     //EVCOMM_SYS_INFO.AC_EVSENominalVoltage = CSUCOMMAC_SHM.GridVoltage[0];        //unit: 1V
     //memcpy(ShmInternalComm->AC_GridVoltage, CSUCOMMAC_SHM.GridVoltage, 3);       //unit: 1V
-    EVCOMM_SYS_INFO.AC_EVSENominalVoltage =  ShmDispenser->gun_info.acCcsInfo.GridVoltage[0] ;
+    EVCOMM_SYS_INFO.AC_EVSENominalVoltage =  ShmDispenser->gun_info.acCcsInfo.GridVoltage[0] ;  
     ShmInternalComm->AC_GridVoltage[0]=ShmDispenser->gun_info.acCcsInfo.GridVoltage[0];
 	ShmInternalComm->AC_GridVoltage[1]=ShmDispenser->gun_info.acCcsInfo.GridVoltage[1] ;
 	ShmInternalComm->AC_GridVoltage[2]=ShmDispenser->gun_info.acCcsInfo.GridVoltage[2] ;

+ 25 - 14
EVSE/Projects/AX80/Apps/CCS/SeccComm.c

@@ -58,7 +58,7 @@ struct appHandEXIDocument ccs_handshake;
 struct dinEXIDocument ccs_exi_doc_DIN;
 struct iso1EXIDocument ccs_exi_doc_ISO1;
 struct iso2EXIDocument ccs_exi_doc_ISO2;
-unsigned char V2GTP_Tx_buf[V2GTP_MSG_TX_BUFFER_SIZE];   //64*1024 嚘�65,536 = 65.5KB
+unsigned char V2GTP_Tx_buf[V2GTP_MSG_TX_BUFFER_SIZE];   //64*1024 ﺿ65,536 = 65.5KB
 unsigned char buf_log_evcomm[SIZE_OF_LOG_BUFFER];
 unsigned char buf_log_evcomm_fork1[SIZE_OF_LOG_BUFFER];
 unsigned char buf_log_evcomm_fork2[SIZE_OF_LOG_BUFFER];
@@ -1477,7 +1477,7 @@ void CP_Detection()
 
         #if ((CCS_ENERGY_TRANSFER_MODE == MODE_AC_SINGLE_PHASE_CORE) || (CCS_ENERGY_TRANSFER_MODE == MODE_AC_THREE_PHASE_CORE))
         {
-        	usleep(10000);
+        	usleep(100000);
             ccs->CpVoltage = ShmInternalComm->AC_CpPositiveVoltage;
             ccs->CpState = ShmInternalComm->AC_CpPresentState;
         }
@@ -1642,7 +1642,7 @@ void CP_Detection()
         Check_CP_State_Update_fork1(ccs);
         #ifndef AX80
         Check_CP_State_Error_fork1(ccs);
-	#endif
+		#endif
         //Updating Plugin status
         #if (PP_PROTECTION_MECHANISM == ENABLE)
         if((ccs->CpState >= 2 ) && (ccs->CpState <= 5 ) && 
@@ -1726,6 +1726,7 @@ void PP_Detection()
                 EVCOMM_SYS_INFO.PpVoltage_pre = EVCOMM_SYS_INFO.PpVoltage;
             }
         }
+
         #if 0
         sleep(5);
         printf("V_pp = %.02f\n", TotalTmpVolt);
@@ -2043,7 +2044,7 @@ void Error_Monitor()
             Update_V2G_Flow_Status(Other_Fault);
             End_Process();
         }
-        usleep(100000);
+		usleep(100000);
     }//while
 }
 
@@ -2070,12 +2071,12 @@ int SendSetKey()
     SendMmePacket.MMTYPE = MMTYPE_CM_SET_KEY_REQ;
     SendMmePacket.FMI[0] = SendMmePacket.FMI[1] = 0;
     SendMmePacketSize = 0;
-    SendMmePacket.MMENTRY[SendMmePacketSize++] = 0x01;//Fixed value (0x01) to indicate 嚙踝蕭NMK嚙踝蕭
+    SendMmePacket.MMENTRY[SendMmePacketSize++] = 0x01;//Fixed value (0x01) to indicate ��NMK��
     memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//My Nonce, Fixed value(0x00000000), encrypted payload not used
     SendMmePacketSize+=4;
     memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,4);//Your Nonce, Fixed value(0x00000000), encrypted payload not used
     SendMmePacketSize+=4;
-    SendMmePacket.MMENTRY[SendMmePacketSize++] = 0x04;//PID, Fixed value (0x04) to indicate 嚙踝蕭HLE protocol嚙踝蕭
+    SendMmePacket.MMENTRY[SendMmePacketSize++] = 0x04;//PID, Fixed value (0x04) to indicate ��HLE protocol��
     memset(SendMmePacket.MMENTRY+SendMmePacketSize,0,2);//PRN, Fixed value(0x00), encrypted payload not used
     SendMmePacketSize+=2;
     SendMmePacket.MMENTRY[SendMmePacketSize++] = 0x00;//PMN, Fixed value(0x00) encrypted payload not used
@@ -2107,7 +2108,7 @@ int SendSetKey()
     HPAVKeyNID(Nid,NewNmkKey,DEFAULT_LEVEL);
     memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,Nid,sizeof(Nid));    //NID, 54 LSBs contain the NID 2 MSBs = 0b00
     SendMmePacketSize+=sizeof(Nid);
-    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//NewEKS,Fixed value (0x01)to indicate 嚙踝蕭NMK嚙踝蕭
+    SendMmePacket.MMENTRY[SendMmePacketSize++]=0x01;//NewEKS,Fixed value (0x01)to indicate ��NMK��
     memcpy(SendMmePacket.MMENTRY+SendMmePacketSize,NewNmkKey,sizeof(NewNmkKey));//NewKey
     SendMmePacketSize += sizeof(NewNmkKey);
     SendMmePacketSize += 19;  //the size before MMENTRY
@@ -3256,9 +3257,9 @@ int MmeProcess(unsigned char *Buffer, int DataLength)
 	        #if (DEBUG_PRINTF_EVCOMM_DETAIL_SHOW == ENABLE)
 	        {
 	            DEBUG_PRINTF_EVCOMM_DETAIL("--- MMTYPE_CM_VALIDATE_REQ ---\n");
-	            DEBUG_PRINTF_EVCOMM_DETAIL("Signal Type: 0x%x\n", MmePacket->MMENTRY[0]);    //Fixed value (0x00) to indicate 嚙踝蕭PEV S2 toggles on control pilot line嚙踝蕭
+	            DEBUG_PRINTF_EVCOMM_DETAIL("Signal Type: 0x%x\n", MmePacket->MMENTRY[0]);    //Fixed value (0x00) to indicate ��PEV S2 toggles on control pilot line��
 	            DEBUG_PRINTF_EVCOMM_DETAIL("Timer: 0x%x\n", MmePacket->MMENTRY[1]);    //Fixed value In the first VALIDATE Request-Response exchange, the Timer field shall be set to zero.
-	            DEBUG_PRINTF_EVCOMM_DETAIL("Result: 0x%x\n", MmePacket->MMENTRY[2]);    //Fixed value In the first VALIDATE Request-Response exchange, the Result field shall be set to 0x01 = 嚙踝蕭ready嚙踝蕭.
+	            DEBUG_PRINTF_EVCOMM_DETAIL("Result: 0x%x\n", MmePacket->MMENTRY[2]);    //Fixed value In the first VALIDATE Request-Response exchange, the Result field shall be set to 0x01 = ��ready��.
 	        }
 	        #endif
 	
@@ -3404,7 +3405,7 @@ int MmeProcess(unsigned char *Buffer, int DataLength)
 	                    }
 	                    if(DiffTimeb(SeqStartTime, SeqEndTime) >= (SendMmePacket.MMENTRY[1]*100 + 100))
 	                    {
-	                        SendMmePacket.MMENTRY[SendMmePacketSize++] = 0;    //Fixed value to indicate 嚙踝蕭PEV S2 toggles on control pilot line嚙踝蕭
+	                        SendMmePacket.MMENTRY[SendMmePacketSize++] = 0;    //Fixed value to indicate ��PEV S2 toggles on control pilot line��
 	                        SendMmePacket.MMENTRY[SendMmePacketSize++] = ToggleNum;
 	                        #if (SUPPORT_BCB_TOGGLE_FUNCTION == ENABLE)
 	                        SendMmePacket.MMENTRY[SendMmePacketSize++] = 2;    //0x02 = Success
@@ -4220,8 +4221,8 @@ int SlacComm()
                             PwmStartTime = time(NULL);
                         }
                         else
-                        {
-                            if((time(NULL) - PwmStartTime) > TT_EVSE_SLAC_init)
+                        { 
+                            if((time(NULL) - PwmStartTime) > ((CCS_ENERGY_TRANSFER_MODE<=1)?20:TT_EVSE_SLAC_init))
                             {
                                 sprintf(buf_log_evcomm,
                                         "SlacComm: Wait CM_SLAC_PARM_REQ Timeout - TT_EVSE_SLAC_init, NowTime(%d)-PwmStartTime(%d)>%d (sec)",
@@ -17799,8 +17800,18 @@ int main(int argc, char *argv[])
 
     //Init Energy transfer mode
     //[To-Do] Parsing Model Name
-    ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
-
+    if(CCS_ENERGY_TRANSFER_MODE<=1)
+    {
+    	if((ShmInternalComm->AC_EVSEModelName[2]=='Y') || (ShmInternalComm->AC_EVSEModelName[2]=='D') || (ShmInternalComm->AC_EVSEModelName[2]=='W'))
+		//if(ShmSysConfigAndInfo->SysConfig.AcPhaseCount==3)
+    		ShmCcsData->EnergyTransferMode = MODE_AC_THREE_PHASE_CORE;
+		else
+			ShmCcsData->EnergyTransferMode = MODE_AC_SINGLE_PHASE_CORE;
+    }
+    else	
+    	ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
+   
+	
     struct ChargingInfoData *ccs;
     ccs = &ShmSysConfigAndInfo->SysInfo.CcsChargingData[0];
 

+ 1 - 1
EVSE/Projects/AX80/Apps/CCS/define.h

@@ -52,7 +52,7 @@
 /**************************************************************************************/
 #ifdef AX80
 #undef CONNECTOR_TEMP_DETECTION
-#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE //MODE_AC_THREE_PHASE_CORE
+#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE 
 #else
 #define CCS_ENERGY_TRANSFER_MODE                    MODE_DC_EXTENDED
 #endif

+ 24 - 4
EVSE/Projects/AX80/Apps/CCS/exi_engine/api/api.c

@@ -1925,7 +1925,7 @@ GLOBAL VARIABLES:
 void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocument *exi_doc_DIN, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_DIN70121 *shm_msg;
     struct dinCurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2005,13 +2005,23 @@ void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocumen
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk =  DIN70121PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
 
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
+	
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;
 	//shm_msg->EVTargetVoltage.Unit = (unsigned char) exi->EVTargetVoltage.Unit;
@@ -2048,7 +2058,7 @@ GLOBAL VARIABLES:
 void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocument *exi_doc_ISO1, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_ISO15118_2014 *shm_msg;
     struct iso1CurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2133,12 +2143,22 @@ void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocum
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk = ISO151182014PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
+	
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
 
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;

+ 16 - 2
EVSE/Projects/AX80/Apps/CCS/version.h

@@ -5,7 +5,7 @@
                      initiated by Joseph D. Anderson
                            (since 2019/12/03)
 =============================================================================*/
-#define FIRMWARE_VERSION            "V0.27.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
+#define FIRMWARE_VERSION            "V0.28.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
 #define HARDWARE_VERSION            "CCS_8.0x"      //8-Byte(ASCII Code): CSU-03-RW, CCS_Board, REV:5.0
 #define LINUX_IMAGE_VERSION         "dd2da761d59f2cdd4064c9d95f8c302a442d33f3 (2019-01-04)"
 #define RTC_DEFAULT_TIME            1595486300      //Epoch time (decimal)
@@ -58,8 +58,22 @@ S: CCS Board
 ================================================================================
 ====================== [Software] Version History (2020) =======================
 ================================================================================
+[VERSION] V0.28.S0
+* Release Date: 2022-03-01
+* Change:
+  1. modify charging remain time 
+  2. reduce SLAC waiting time to 20s for AC
+  3. set AC phase according to model name
+  4. add delay to while loop
+* File
+  1. exi_engine\api\api.c
+  2. SeccComm.c
+  3. SeccComm.c
+  4. CsuComm.c, 
+  
+  
 [VERSION] V0.27.S0
-* Release Date: 2020-08-
+* Release Date: 2021-12-
 * Change:
   1. change Isolation test state to valid if recevied invalid during precharge and charging
   2. Add CM_AMP_MAP message 

+ 1 - 1
EVSE/Projects/AX80/Apps/Module_Dispenser.c

@@ -1128,7 +1128,7 @@ int main(void)
 								{
 									DEBUG_INFO("Change to CP STATE E for 4 secs.\n");
 									//CP STATE E for 4 secs
-									sleep(3);
+									sleep(4);
 								}
 
 								//restore normal CP PWM duty

+ 3 - 3
EVSE/Projects/AX80/Apps/main.c

@@ -24,7 +24,7 @@
 #define TIMEOUT_SPEC_HANDSHAKING_LED			185
 #define TIMEOUT_SPEC_REFRESH_CHARGING_INFO		30
 #define TIMEOUT_SPEC_PROFILE_PREPARE			60
-#define TIMEOUT_SPEC_BS_HLC_HANDSHAKE			60
+#define TIMEOUT_SPEC_BS_HLC_HANDSHAKE			30
 #define TIMEOUT_SPEC_EV_READY					30
 #define TIMEOUT_SPEC_CCS_HEARTBEAT_COUNT_RESET	10
 #define TIMEOUT_SPEC_CCS_HANDSHAKE				120
@@ -4031,7 +4031,7 @@ void checkTask()
 				{
 					DEBUG_WARN("OcppBackend watch dog timeout task restart.\n");
 					ShmOCPP16Data->procDogTime =  time((time_t*)NULL);
-					system("pkill OcppBackend");
+					system("killall OcppBackend");
 					sleep(3);
 					ocpp_process_start();
 				}
@@ -4048,7 +4048,7 @@ void checkTask()
 				{
 					DEBUG_WARN("OcppBackend20 watch dog timeout task restart.\n");
 					ShmOCPP20Data->procDogTime =  time((time_t*)NULL);
-					system("pkill OcppBackend20");
+					system("killall OcppBackend20");
 					sleep(3);
 					ocpp_process_start();
 				}

BIN
EVSE/Projects/CCS/Apps/CsuComm


+ 4 - 0
EVSE/Projects/CCS/Apps/CsuComm.c

@@ -2301,6 +2301,9 @@ int Proc_DownloadFinishRes(int Fd)
         sleep(2);
         //system("killall FWUpdate");
         CSUCOMMDC_TASK_FLAG.Got_DownloadFinishReq = FALSE;
+		
+		Reboot_Process();
+		
         return nbytes;
     }
 }
@@ -3328,6 +3331,7 @@ int CsuCommAC_Proc()
     while(1)
     {
         CsuCommAC_SHM_Rx_Update();
+        usleep(100000);
     }
 }
 #endif

+ 16 - 5
EVSE/Projects/CCS/Apps/SeccComm.c

@@ -1477,6 +1477,7 @@ void CP_Detection()
 
         #if ((CCS_ENERGY_TRANSFER_MODE == MODE_AC_SINGLE_PHASE_CORE) || (CCS_ENERGY_TRANSFER_MODE == MODE_AC_THREE_PHASE_CORE))
         {
+        	usleep(100000);
             ccs->CpVoltage = ShmInternalComm->AC_CpPositiveVoltage;
             ccs->CpState = ShmInternalComm->AC_CpPresentState;
         }
@@ -2043,7 +2044,7 @@ void Error_Monitor()
             Update_V2G_Flow_Status(Other_Fault);
             End_Process();
         }
-
+		usleep(100000);
     }//while
 }
 
@@ -4220,8 +4221,8 @@ int SlacComm()
                             PwmStartTime = time(NULL);
                         }
                         else
-                        {
-                            if((time(NULL) - PwmStartTime) > TT_EVSE_SLAC_init)
+                        { 
+                            if((time(NULL) - PwmStartTime) > ((CCS_ENERGY_TRANSFER_MODE<=1)?20:TT_EVSE_SLAC_init))
                             {
                                 sprintf(buf_log_evcomm,
                                         "SlacComm: Wait CM_SLAC_PARM_REQ Timeout - TT_EVSE_SLAC_init, NowTime(%d)-PwmStartTime(%d)>%d (sec)",
@@ -17799,8 +17800,18 @@ int main(int argc, char *argv[])
 
     //Init Energy transfer mode
     //[To-Do] Parsing Model Name
-    ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
-
+    if(CCS_ENERGY_TRANSFER_MODE<=1)
+    {
+    	if((ShmInternalComm->AC_EVSEModelName[2]=='Y') || (ShmInternalComm->AC_EVSEModelName[2]=='D') || (ShmInternalComm->AC_EVSEModelName[2]=='W'))
+		//if(ShmSysConfigAndInfo->SysConfig.AcPhaseCount==3)
+    		ShmCcsData->EnergyTransferMode = MODE_AC_THREE_PHASE_CORE;
+		else
+			ShmCcsData->EnergyTransferMode = MODE_AC_SINGLE_PHASE_CORE;
+    }
+    else	
+    	ShmCcsData->EnergyTransferMode = CCS_ENERGY_TRANSFER_MODE;
+   
+	
     struct ChargingInfoData *ccs;
     ccs = &ShmSysConfigAndInfo->SysInfo.CcsChargingData[0];
 

+ 1 - 1
EVSE/Projects/CCS/Apps/define.h

@@ -52,7 +52,7 @@
 /**************************************************************************************/
 #ifdef AWCCS
 #undef CONNECTOR_TEMP_DETECTION
-#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE //MODE_AC_THREE_PHASE_CORE
+#define CCS_ENERGY_TRANSFER_MODE                    MODE_AC_SINGLE_PHASE_CORE 
 #else
 #define CCS_ENERGY_TRANSFER_MODE                    MODE_DC_EXTENDED
 #endif

+ 24 - 4
EVSE/Projects/CCS/Apps/exi_engine/api/api.c

@@ -1925,7 +1925,7 @@ GLOBAL VARIABLES:
 void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocument *exi_doc_DIN, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_DIN70121 *shm_msg;
     struct dinCurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2005,13 +2005,23 @@ void SHM_Save_din_CurrentDemandReq(struct CcsData *shm_ccs, struct dinEXIDocumen
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = DIN70121PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk =  DIN70121PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
 
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
+	
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;
 	//shm_msg->EVTargetVoltage.Unit = (unsigned char) exi->EVTargetVoltage.Unit;
@@ -2048,7 +2058,7 @@ GLOBAL VARIABLES:
 void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocument *exi_doc_ISO1, struct SysConfigAndInfo *shm_sys)
 {
     // ======== [STEP 1/3] Initialize ========
-    int i = 0;
+    int i = 0, TimeToFull=0, TimeToBulk=0;
     struct CurrentDemandRequest_ISO15118_2014 *shm_msg;
     struct iso1CurrentDemandReqType *exi;
 	struct ChargingInfoData *sys;
@@ -2133,12 +2143,22 @@ void SHM_Save_iso1_CurrentDemandReq(struct CcsData *shm_ccs, struct iso1EXIDocum
 	shm_msg->RemainingTimeToFullSoC.Multiplier = (int) exi->RemainingTimeToFullSoC.Multiplier;
 	shm_msg->RemainingTimeToFullSoC.Unit = (unsigned char) exi->RemainingTimeToFullSoC.Unit;
 	shm_msg->RemainingTimeToFullSoC.Value = (short) exi->RemainingTimeToFullSoC.Value;
-	sys->RemainChargingDuration = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
+	TimeToFull = ISO151182014PhyValDecode(shm_msg->RemainingTimeToFullSoC);
 
 	//[BODY (9/10)] RemainingTimeToBulkSoC
 	shm_msg->RemainingTimeToBulkSoC.Multiplier = (int) exi->RemainingTimeToBulkSoC.Multiplier;
 	shm_msg->RemainingTimeToBulkSoC.Unit = (unsigned char) exi->RemainingTimeToBulkSoC.Unit;
 	shm_msg->RemainingTimeToBulkSoC.Value = (short) exi->RemainingTimeToBulkSoC.Value;
+	TimeToBulk = ISO151182014PhyValDecode(shm_msg->RemainingTimeToBulkSoC);
+	
+	if(TimeToFull > 0)
+		sys->RemainChargingDuration = TimeToFull;
+	else if(TimeToBulk > 0)
+		sys->RemainChargingDuration = TimeToBulk;
+	else
+	{
+		sys->RemainChargingDuration=0;		
+	}	
 
 	//[BODY (10/10)] EVTargetVoltage
 	shm_msg->EVTargetVoltage.Multiplier = (int) exi->EVTargetVoltage.Multiplier;

+ 16 - 2
EVSE/Projects/CCS/Apps/version.h

@@ -5,7 +5,7 @@
                      initiated by Joseph D. Anderson
                            (since 2019/12/03)
 =============================================================================*/
-#define FIRMWARE_VERSION            "V0.27.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
+#define FIRMWARE_VERSION            "V0.28.S0"   //8-Byte(ASCII Code), “tx.yz.ab.cd”
 #define HARDWARE_VERSION            "CCS_8.0x"      //8-Byte(ASCII Code): CSU-03-RW, CCS_Board, REV:5.0
 #define LINUX_IMAGE_VERSION         "dd2da761d59f2cdd4064c9d95f8c302a442d33f3 (2019-01-04)"
 #define RTC_DEFAULT_TIME            1595486300      //Epoch time (decimal)
@@ -58,8 +58,22 @@ S: CCS Board
 ================================================================================
 ====================== [Software] Version History (2020) =======================
 ================================================================================
+[VERSION] V0.28.S0
+* Release Date: 2022-03-01
+* Change:
+  1. modify charging remain time 
+  2. reduce SLAC waiting time to 20s for AC
+  3. set AC phase according to model name
+  4. add delay to while loop
+* File
+  1. exi_engine\api\api.c
+  2. SeccComm.c
+  3. SeccComm.c
+  4. CsuComm.c, 
+  
+  
 [VERSION] V0.27.S0
-* Release Date: 2020-08-
+* Release Date: 2021-12-
 * Change:
   1. change Isolation test state to valid if recevied invalid during precharge and charging
   2. Add CM_AMP_MAP message 

+ 14 - 1
EVSE/Projects/CCS/sh/rcS

@@ -35,7 +35,20 @@ mount -a
 mount -t tmpfs tmpfs /mnt
 
 chmod 777 /Storage
-mount -t jffs2 /dev/mtdblock13 /Storage
+#mount -t jffs2 /dev/mtdblock13 /Storage
+ubiattach /dev/ubi_ctrl -m 13
+if [ "$?" -eq "0" ]
+then
+   echo "Success."
+else
+   echo "Erase /dev/mtd13 jffs2 block"
+   flash_eraseall /dev/mtd13
+   ubiattach /dev/ubi_ctrl -m 13
+fi
+
+ubimkvol /dev/ubi0 -N ubiNandFs -m
+mount -t ubifs ubi0:ubiNandFs /Storage
+
 mkdir -p /Storage/EventLog
 mkdir -p /Storage/ChargeLog
 mkdir -p /Storage/SystemLog