|
@@ -2,7 +2,7 @@
|
|
|
* Module_LcmControl.c
|
|
|
*
|
|
|
* Created on : 2020-10-20
|
|
|
- * Update on : 2021-12-14
|
|
|
+ * Update on : 2021-12-20
|
|
|
* Author : Folus Wen, Eason Yang
|
|
|
* Version : V0.24
|
|
|
*
|
|
@@ -92,14 +92,14 @@ enum TMR_IDX
|
|
|
TMR_IDX_SHOW_AUTH_RESULT
|
|
|
};
|
|
|
|
|
|
-struct timeb startTime[AC_QUANTITY][10];
|
|
|
+struct timespec startTime[AC_QUANTITY][TMR_IDX_SHOW_AUTH_RESULT];
|
|
|
|
|
|
-#define TIME_ANIMATION_PLUGIN 1000
|
|
|
-#define TIME_ANIMATION_BATTERY 1000
|
|
|
-#define TIME_ANIMATION_CONNECTION 1000
|
|
|
-#define TIME_ANIMATION_ALARM 5000
|
|
|
-#define TIME_REFRESH_TIME 5000
|
|
|
-#define TIME_AUTH_RESULT_TIME 5000
|
|
|
+#define TIME_ANIMATION_PLUGIN 1 // Unit: Second
|
|
|
+#define TIME_ANIMATION_BATTERY 1 // Unit: Second
|
|
|
+#define TIME_ANIMATION_CONNECTION 1 // Unit: Second
|
|
|
+#define TIME_ANIMATION_ALARM 5 // Unit: Second
|
|
|
+#define TIME_REFRESH_TIME 5 // Unit: Second
|
|
|
+#define TIME_AUTH_RESULT_TIME 5 // Unit: Second
|
|
|
|
|
|
//=======================================
|
|
|
// Declare Variable
|
|
@@ -152,6 +152,25 @@ int StoreLogMsg(const char *fmt, ...)
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
+void refreshStartTimer(struct timespec *timer)
|
|
|
+{
|
|
|
+ clock_gettime(CLOCK_MONOTONIC, timer);
|
|
|
+}
|
|
|
+
|
|
|
+int getDiffSecNow(struct timespec timer)
|
|
|
+{
|
|
|
+ struct timespec timerNow;
|
|
|
+
|
|
|
+ clock_gettime(CLOCK_MONOTONIC, &timerNow);
|
|
|
+
|
|
|
+ return (int)((((unsigned long)(timerNow.tv_sec - timer.tv_sec) * 1000) + ((unsigned long)((timerNow.tv_nsec / 1000000) - (timer.tv_nsec / 1000000))))/1000);
|
|
|
+}
|
|
|
+
|
|
|
+int getDiffSecBetween(struct timespec start, struct timespec end)
|
|
|
+{
|
|
|
+ return (int)((((unsigned long)(end.tv_sec - start.tv_sec) * 1000) + ((unsigned long)((end.tv_nsec / 1000000) - (start.tv_nsec / 1000000))))/1000);
|
|
|
+}
|
|
|
+
|
|
|
long long DiffTimebWithNow(struct timeb ST)
|
|
|
{
|
|
|
//return milli-second
|
|
@@ -680,9 +699,9 @@ void page_header(uint8_t gun_index, uint8_t system_mode)
|
|
|
else
|
|
|
{
|
|
|
// EVERY 5 SECONDS TO UPDATE PRICE
|
|
|
- if(DiffTimebWithNow(startTime[gun_index][TMR_IDX_PRICE]) > (TIME_REFRESH_TIME))
|
|
|
+ if(getDiffSecNow(startTime[gun_index][TMR_IDX_PRICE]) > (TIME_REFRESH_TIME))
|
|
|
{
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_PRICE]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_PRICE]);
|
|
|
setBillingFromBackend(gun_index, system_mode);
|
|
|
}
|
|
|
}
|
|
@@ -1364,7 +1383,7 @@ void setFinalCost(uint8_t gun_index, uint8_t type)
|
|
|
lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, TEXT_REMAINING_ACCOUNT_BALANCE, output_data, ARRAY_SIZE(output_data));
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
+ {
|
|
|
setDisplayValue(ICON_COMPLETE_WALLET, APPEAR);
|
|
|
|
|
|
strcpy((char*)balance_empty, "-----");
|
|
@@ -1690,9 +1709,9 @@ void setWarningStatus(uint8_t gun_index)
|
|
|
|
|
|
setAlarmCodeAndIcon();
|
|
|
}
|
|
|
- else if(ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 4 && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_ALARM]) > (TIME_ANIMATION_ALARM)))
|
|
|
+ else if(ShmSysConfigAndInfo->SysWarningInfo.WarningCount > 4 && (getDiffSecNow(startTime[gun_index][TMR_IDX_ALARM]) > (TIME_ANIMATION_ALARM)))
|
|
|
{
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_ALARM]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_ALARM]);
|
|
|
if(ShmSysConfigAndInfo->SysWarningInfo.PageIndex == 0)
|
|
|
{
|
|
|
ShmSysConfigAndInfo->SysWarningInfo.PageIndex = 1;
|
|
@@ -1752,30 +1771,30 @@ void setConnectionAnimation(uint8_t gun_index, uint8_t system_mode)
|
|
|
case SYS_MODE_IDLE:
|
|
|
if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
|
|
|
{
|
|
|
- if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
+ if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_1;
|
|
|
}
|
|
|
- else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
+ else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_2);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
+ if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_1;
|
|
|
}
|
|
|
- else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
+ else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_ANIMATION, CONNECTION_FLASHING_2);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1783,45 +1802,45 @@ void setConnectionAnimation(uint8_t gun_index, uint8_t system_mode)
|
|
|
case SYS_MODE_PREPARING:
|
|
|
if(ShmCharger->gun_info[gun_index].chargingMode == CHARGING_MODE_HLC)
|
|
|
{
|
|
|
- if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
+ if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_1;
|
|
|
}
|
|
|
- else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
+ else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_2);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
+ if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_1;
|
|
|
}
|
|
|
- else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
+ else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_ANIMATION, CONNECTION_FLASHING_2);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
case SYS_MODE_CHARGING:
|
|
|
- if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
+ if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION)))
|
|
|
{
|
|
|
setDisplayValue(ICON_CHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_1;
|
|
|
}
|
|
|
- else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
+ else if((CONNECTION_LEVEL_STATUS == CONNECTION_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_CONNECTION]) > (TIME_ANIMATION_CONNECTION*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_CHARGING_ANIMATION, CONNECTION_FLASHING_2);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
break;
|
|
|
case SYS_MODE_TERMINATING:
|
|
@@ -1844,16 +1863,16 @@ void setGunPluginAnimation(uint8_t gun_index)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN)))
|
|
|
+ if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_PLUG_ARROW, PLUGIN_ARROW_1);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_1;
|
|
|
}
|
|
|
- else if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN*2)))
|
|
|
+ else if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_PLUG_ARROW, PLUGIN_ARROW_2);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1863,16 +1882,16 @@ void setGunPluginAnimation(uint8_t gun_index)
|
|
|
//=======================================
|
|
|
void setPlugAndChargeAnimation(uint8_t gun_index)
|
|
|
{
|
|
|
- if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_0) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN)))
|
|
|
+ if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_0) && (getDiffSecNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PLUG_AND_CHARGE_ARROW, PLUGIN_ARROW_1);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_1;
|
|
|
}
|
|
|
- else if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_1) && (DiffTimebWithNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN*2)))
|
|
|
+ else if((GUN_PLUGING_LEVEL_STATUS == GUN_PLUGING_LEVEL_1) && (getDiffSecNow(startTime[gun_index][TMR_IDX_PLUGIN]) > (TIME_ANIMATION_PLUGIN*2)))
|
|
|
{
|
|
|
setDisplayValue(ICON_PLUG_AND_CHARGE_ARROW, PLUGIN_ARROW_2);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2044,13 +2063,13 @@ void setDefaultValue(uint8_t gun_index, uint8_t system_mode)
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_PLUG_ARROW, PLUGIN_ARROW_1);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
}
|
|
|
break;
|
|
|
case SYS_MODE_AUTHORIZING:
|
|
@@ -2060,18 +2079,18 @@ void setDefaultValue(uint8_t gun_index, uint8_t system_mode)
|
|
|
{
|
|
|
setDisplayValue(ICON_PRECHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
setDisplayValue(ICON_PREPARING_PLUG_ARROW, PLUGIN_ARROW_1);
|
|
|
GUN_PLUGING_LEVEL_STATUS = GUN_PLUGING_LEVEL_0;
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_PLUGIN]);
|
|
|
}
|
|
|
break;
|
|
|
case SYS_MODE_CHARGING:
|
|
|
setDisplayValue(ICON_CHARGING_ANIMATION, CONNECTION_FLASHING_1);
|
|
|
- ftime(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
+ refreshStartTimer(&startTime[gun_index][TMR_IDX_CONNECTION]);
|
|
|
CONNECTION_LEVEL_STATUS = CONNECTION_LEVEL_0;
|
|
|
break;
|
|
|
case SYS_MODE_TERMINATING:
|
|
@@ -2587,10 +2606,10 @@ int main(void)
|
|
|
|
|
|
if(ShmCharger->isAuthrizing || ShmCharger->isGetAuthResult)
|
|
|
{
|
|
|
- if(DiffTimebWithNow(startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]) >= TIME_AUTH_RESULT_TIME)
|
|
|
+ if(getDiffSecNow(startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]) >= TIME_AUTH_RESULT_TIME)
|
|
|
ShmCharger->isGetAuthResult = FALSE;
|
|
|
|
|
|
- if(DiffTimebWithNow(startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]) < TIME_AUTH_RESULT_TIME)
|
|
|
+ if(getDiffSecNow(startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]) < TIME_AUTH_RESULT_TIME)
|
|
|
{
|
|
|
page_authorizing(ShmCharger->gun_selectd);
|
|
|
ShmCharger->gun_info[ShmCharger->gun_selectd].isHandshakeTimerRefresh = YES;
|
|
@@ -2603,7 +2622,7 @@ int main(void)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ftime(&startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]);
|
|
|
+ refreshStartTimer(&startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]);
|
|
|
|
|
|
switch(ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
|
|
|
{
|