|
@@ -0,0 +1,2351 @@
|
|
|
|
+#include <stdio.h> /*標準輸入輸出定義*/
|
|
|
|
+#include <stdlib.h> /*標準函數庫定義*/
|
|
|
|
+#include <stdint.h>
|
|
|
|
+#include <string.h>
|
|
|
|
+#include <unistd.h>
|
|
|
|
+#include <termios.h>
|
|
|
|
+#include <fcntl.h>
|
|
|
|
+#include <time.h>
|
|
|
|
+
|
|
|
|
+#include <sys/ioctl.h>
|
|
|
|
+#include <sys/timeb.h>
|
|
|
|
+
|
|
|
|
+#include "Module_LcmControl.h"
|
|
|
|
+#include "../Log/log.h"
|
|
|
|
+#include "../ShareMemory/shmMem.h"
|
|
|
|
+#include "../Define/define.h"
|
|
|
|
+#include "../Config.h"
|
|
|
|
+#include "../SelectGun/SelectGun.h"
|
|
|
|
+
|
|
|
|
+//------------------------------------------------------------------------------
|
|
|
|
+//struct SysConfigAndInfo *ShmSysConfigAndInfo;
|
|
|
|
+//struct StatusCodeData *ShmStatusCodeData;
|
|
|
|
+static struct SysConfigData *pSysConfig = NULL;
|
|
|
|
+static struct SysInfoData *pSysInfo = NULL;
|
|
|
|
+static struct WARNING_CODE_INFO *pSysWarning = NULL;
|
|
|
|
+
|
|
|
|
+static struct FanModuleData *ShmFanModuleData;
|
|
|
|
+static struct PrimaryMcuData *ShmPrimaryMcuData;
|
|
|
|
+static SelectGunInfo *ShmSelectGunInfo = NULL;
|
|
|
|
+static struct ChargingInfoData *pDcChargingInfo = NULL;
|
|
|
|
+static struct ChargingInfoData *pAcChargingInfo = NULL;
|
|
|
|
+
|
|
|
|
+bool needReloadQr = true;
|
|
|
|
+
|
|
|
|
+bool _isShow = false; //DS60-120 add
|
|
|
|
+uint8_t _showInformIndex = 0; //DS60-120 add
|
|
|
|
+
|
|
|
|
+int _port;
|
|
|
|
+//char* pPortName = "/dev/ttyO2";
|
|
|
|
+char *pPortName = "/dev/ttyS3";
|
|
|
|
+char *moduleName = "DMT80480T070_09WT";
|
|
|
|
+uint8_t _totalCount;
|
|
|
|
+uint8_t acgunCount;
|
|
|
|
+//struct ChargingInfoData *_chargingInfoData[CHAdeMO_QUANTITY + CCS_QUANTITY + GB_QUANTITY];
|
|
|
|
+//struct ChargingInfoData *ac_chargingInfo[AC_QUANTITY];
|
|
|
|
+
|
|
|
|
+uint8_t ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV5;
|
|
|
|
+uint8_t isDiffStatus = false;
|
|
|
|
+uint8_t isChangeBattMap = false;
|
|
|
|
+// 當前選擇的槍號
|
|
|
|
+short _currentPage = _LCM_VIEW;
|
|
|
|
+short _oldPage = _LCM_VIEW;
|
|
|
|
+
|
|
|
|
+uint8_t _gunIndex = 0;
|
|
|
|
+bool _wifi_conn_status = false;
|
|
|
|
+bool _battery_display_ani = false;
|
|
|
|
+uint8_t _curPage_index = 0;
|
|
|
|
+bool _page_reload = false;
|
|
|
|
+
|
|
|
|
+// LCM - HW
|
|
|
|
+uint8_t _everyPageRollChange = 0;
|
|
|
|
+short __conn_status = 0x0030;
|
|
|
|
+short __ethernet_status = 0x0032;
|
|
|
|
+short __3G4G_status = 0x0036;
|
|
|
|
+short __3G4G_status1 = 0x0037;
|
|
|
|
+short __3G4G_move_status = 0x0038;
|
|
|
|
+short __wifi_status = 0x003C;
|
|
|
|
+
|
|
|
|
+short __sel_gun_btn = 0x0040;
|
|
|
|
+short __ret_home_btn = 0x0042;
|
|
|
|
+short __stop_method_btn = 0x0044;
|
|
|
|
+
|
|
|
|
+short __qr_code = 0x0250;
|
|
|
|
+short __main_rfid = 0x0052;
|
|
|
|
+short __main_qr = 0x0054;
|
|
|
|
+short __main_app = 0x0056;
|
|
|
|
+
|
|
|
|
+short __plug_in_arrow = 0x0060;
|
|
|
|
+
|
|
|
|
+short __conn_line = 0x0066;
|
|
|
|
+
|
|
|
|
+short __gun_type_index = 0x0070;
|
|
|
|
+short __cmp_gun_type_index = 0x0080; ////For Audi
|
|
|
|
+short __batt_map_empty = 0x0090; ////For Audi
|
|
|
|
+short __qr_code_pre = 0x0280;
|
|
|
|
+
|
|
|
|
+short __side_top = 0x0090;
|
|
|
|
+short __side_down = 0x0092;
|
|
|
|
+short __side_mid = 0x0094;
|
|
|
|
+
|
|
|
|
+short __conn_line_chag = 0x0096;
|
|
|
|
+short __batt_map = 0x0100;
|
|
|
|
+short __soc_value_charging = 0x0102;
|
|
|
|
+short __remain_time_map = 0x0106;
|
|
|
|
+short __power_map = 0x0108;
|
|
|
|
+short __energy_map = 0x010A;
|
|
|
|
+short __remain_time_tx = 0x0110;
|
|
|
|
+
|
|
|
|
+short __trp_remain_time_map = 0x0116;
|
|
|
|
+short __trp_power_map = 0x0118;
|
|
|
|
+short __trp_energy_map = 0x011A;
|
|
|
|
+
|
|
|
|
+short __output_eng_tx = 0x0120;
|
|
|
|
+short __total_out_eng_tx = 0x0130;
|
|
|
|
+short __conn_line_comp = 0x0140;
|
|
|
|
+short __charging_fee_map = 0x0146;
|
|
|
|
+short __charging_fee_tx = 0x0150;
|
|
|
|
+
|
|
|
|
+short __money_by_rate = 0x0200;
|
|
|
|
+short __money_rate = 0x0220;
|
|
|
|
+short __money_rate_map = 0x0230;
|
|
|
|
+
|
|
|
|
+//DS60-120 add
|
|
|
|
+short __csu_ver_string = 0x0300;
|
|
|
|
+short __csu_ver_value = 0x0310;
|
|
|
|
+short __fan_speed_string = 0x0390;
|
|
|
|
+short __fan_speed_value = 0x0400;
|
|
|
|
+
|
|
|
|
+short __dc1_ver_string = 0x0320;
|
|
|
|
+short __dc1_ver_value = 0x0330;
|
|
|
|
+short __dc2_ver_string = 0x0340;
|
|
|
|
+short __dc2_ver_value = 0x0350;
|
|
|
|
+short __eth0_ip_string = 0x0360;
|
|
|
|
+short __eth0_ip_value = 0x0370;
|
|
|
|
+short __sn_string = 0x0410;
|
|
|
|
+short __sn_value = 0x0420;
|
|
|
|
+
|
|
|
|
+//For Audi, for select gun
|
|
|
|
+short __left_gun_map = 0x0260;
|
|
|
|
+short __right_gun_map = 0x0262;
|
|
|
|
+short __add_chk_btn = 0x0264;
|
|
|
|
+//short __station_id = 0x0270;
|
|
|
|
+short __balance = 0x0270;
|
|
|
|
+short __remain_balance = 0x0280;
|
|
|
|
+short __custStationIdL1 = 0x0450;
|
|
|
|
+//short __custStationIdL2 = 0x0470;
|
|
|
|
+short _emergency_map = 0x011C;
|
|
|
|
+
|
|
|
|
+// ICON ID
|
|
|
|
+uint8_t _disappear = 0;
|
|
|
|
+uint8_t _disconnect = 1;
|
|
|
|
+uint8_t _connect = 2;
|
|
|
|
+uint8_t _warning = 3;
|
|
|
|
+uint8_t _arrow_dark = 4;
|
|
|
|
+uint8_t _arrow_light = 5;
|
|
|
|
+uint8_t _3G4G_disconnect = 6;
|
|
|
|
+uint8_t __3G4G_connect = 7;
|
|
|
|
+uint8_t _wifi_disconnect = 8;
|
|
|
|
+uint8_t _wifi_connect = 9;
|
|
|
|
+uint8_t _logo = 10;
|
|
|
|
+uint8_t _conn_map1 = 11;
|
|
|
|
+uint8_t _conn_map2 = 12;
|
|
|
|
+uint8_t _sel_gun_btn = 13;
|
|
|
|
+uint8_t _back_home_btn = 14;
|
|
|
|
+uint8_t _stop_charging_btn = 15;
|
|
|
|
+uint8_t _stop_charging_btn_scan = 16;
|
|
|
|
+uint8_t _chademo_dark = 17;
|
|
|
|
+uint8_t _ccs_dark = 18;
|
|
|
|
+uint8_t _gbt_dark = 19;
|
|
|
|
+uint8_t _actype_dark = 20;
|
|
|
|
+uint8_t _chademo_light = 21;
|
|
|
|
+uint8_t _ccs_light = 22;
|
|
|
|
+uint8_t _gbt_light = 23;
|
|
|
|
+uint8_t _actype_light = 24;
|
|
|
|
+uint8_t _main_none_rfid = 25;
|
|
|
|
+uint8_t _main_rfid = 26;
|
|
|
|
+uint8_t _main_none_app = 27;
|
|
|
|
+uint8_t _main_app = 28;
|
|
|
|
+uint8_t _main_none_qr = 29;
|
|
|
|
+uint8_t _main_qr = 30;
|
|
|
|
+uint8_t _charging_map1 = 31;
|
|
|
|
+uint8_t _charging_map2 = 32;
|
|
|
|
+uint8_t _battery_empty = 33;
|
|
|
|
+uint8_t _battery_cap_20 = 34;
|
|
|
|
+uint8_t _battery_cap_40 = 35;
|
|
|
|
+uint8_t _battery_cap_60 = 36;
|
|
|
|
+uint8_t _battery_cap_80 = 37;
|
|
|
|
+uint8_t _battery_cap_100 = 38;
|
|
|
|
+uint8_t _battery_map = 39;
|
|
|
|
+uint8_t _power_map = 40;
|
|
|
|
+uint8_t _time_map = 41;
|
|
|
|
+uint8_t _complete_map = 42;
|
|
|
|
+uint8_t _battery_soc_20 = 43;
|
|
|
|
+uint8_t _battery_soc_40 = 44;
|
|
|
|
+uint8_t _battery_soc_60 = 45;
|
|
|
|
+uint8_t _battery_soc_80 = 46;
|
|
|
|
+uint8_t _battery_soc_100 = 47;
|
|
|
|
+uint8_t _battery_eng_map = 48;
|
|
|
|
+uint8_t _money_map = 49;
|
|
|
|
+uint8_t _elapse_time_map = 50;
|
|
|
|
+uint8_t _charging_money = 51;
|
|
|
|
+//uint8_t _side_none_rfid = 52;
|
|
|
|
+//uint8_t _side_rfid = 53;
|
|
|
|
+//uint8_t _side_none_app = 54;
|
|
|
|
+//uint8_t _side_app = 55;
|
|
|
|
+//uint8_t _side_none_qr = 56;
|
|
|
|
+//uint8_t _side_qr = 57;
|
|
|
|
+uint8_t _eth_disconnect = 52; //58;
|
|
|
|
+uint8_t _eth_connect = 53; //59;
|
|
|
|
+
|
|
|
|
+uint8_t _chademo_dark_cmp = 54;
|
|
|
|
+uint8_t _ccs_dark_cmp = 55;
|
|
|
|
+uint8_t _gbt_dark_cmp = 56;
|
|
|
|
+uint8_t _actype_dark_cmp = 57;
|
|
|
|
+uint8_t _chademo_light_cmp = 58;
|
|
|
|
+uint8_t _ccs_light_cmp = 59;
|
|
|
|
+uint8_t _gbt_light_cmp = 60;
|
|
|
|
+uint8_t _actype_light_cmp = 61;
|
|
|
|
+
|
|
|
|
+uint8_t _logo_cmp = 62;
|
|
|
|
+uint8_t _battery_eng_trp_map = 63;
|
|
|
|
+uint8_t _money_trp_map = 64;
|
|
|
|
+uint8_t _elapse_time_trp_map = 65;
|
|
|
|
+
|
|
|
|
+////For Audi
|
|
|
|
+uint8_t _left_gun_disable_map = 66;
|
|
|
|
+uint8_t _left_gun_enable_map = 67;
|
|
|
|
+uint8_t _right_gun_disable_map = 68;
|
|
|
|
+uint8_t _right_gun_enable_map = 69;
|
|
|
|
+uint8_t _select_gun_btn = 70;
|
|
|
|
+uint8_t _emergency_disable_map = 72;
|
|
|
|
+// For replug
|
|
|
|
+struct timespec showReplugStrTimer;
|
|
|
|
+short __show_replugString_value = 0x0460;
|
|
|
|
+uint8_t _showReplugStr_1 = 74;
|
|
|
|
+uint8_t _showReplugStr_2 = 75;
|
|
|
|
+
|
|
|
|
+//#define log_info(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
|
|
+//#define log_warn(format, args...) StoreLogMsg("[%s:%d][%s][Warn] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
|
|
+//#define log_error(format, args...) StoreLogMsg("[%s:%d][%s][Error] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
|
|
|
|
+
|
|
|
|
+//=================================
|
|
|
|
+// Common routine
|
|
|
|
+//=================================
|
|
|
|
+/*int StoreLogMsg(const char *fmt, ...)
|
|
|
|
+{
|
|
|
|
+ char Buf[4096 + 256];
|
|
|
|
+ char buffer[4096];
|
|
|
|
+ va_list args;
|
|
|
|
+ struct timeb SeqEndTime;
|
|
|
|
+ struct tm *tm;
|
|
|
|
+
|
|
|
|
+ va_start(args, fmt);
|
|
|
|
+ int rc = vsnprintf(buffer, sizeof(buffer), fmt, args);
|
|
|
|
+ va_end(args);
|
|
|
|
+
|
|
|
|
+ memset(Buf, 0, sizeof(Buf));
|
|
|
|
+ ftime(&SeqEndTime);
|
|
|
|
+ SeqEndTime.time = time(NULL);
|
|
|
|
+ tm = localtime(&SeqEndTime.time);
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->SwitchDebugFlag == YES) {
|
|
|
|
+ sprintf(Buf, "%02d:%02d:%02d:%03d - %s",
|
|
|
|
+ tm->tm_hour, tm->tm_min, tm->tm_sec, SeqEndTime.millitm, buffer);
|
|
|
|
+ printf("%s ", Buf);
|
|
|
|
+ } else {
|
|
|
|
+ sprintf(Buf, "echo \"%04d-%02d-%02d %02d:%02d:%02d:%03d - %s\" >> /Storage/SystemLog/[%04d.%02d]SystemLog",
|
|
|
|
+ tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, SeqEndTime.millitm,
|
|
|
|
+ buffer,
|
|
|
|
+ tm->tm_year + 1900, tm->tm_mon + 1);
|
|
|
|
+ system(Buf);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return rc;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+char *getTimeString(void)
|
|
|
|
+{
|
|
|
|
+ char *result = malloc(21);
|
|
|
|
+ time_t timep;
|
|
|
|
+ struct tm *p;
|
|
|
|
+ time(&timep);
|
|
|
|
+ p = gmtime(&timep);
|
|
|
|
+
|
|
|
|
+ sprintf(result, "[%04d-%02d-%02d %02d:%02d:%02d]", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday, p->tm_hour, p->tm_hour, p->tm_sec);
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+*/
|
|
|
|
+
|
|
|
|
+#if 0
|
|
|
|
+//==========================================
|
|
|
|
+// Init all share memory
|
|
|
|
+//==========================================
|
|
|
|
+int InitShareMemory()
|
|
|
|
+{
|
|
|
|
+ int result = PASS;
|
|
|
|
+ int MeterSMId;
|
|
|
|
+
|
|
|
|
+ //creat ShmSysConfigAndInfo
|
|
|
|
+ if ((MeterSMId = shmget(ShmSysConfigAndInfoKey, sizeof(struct SysConfigAndInfo), 0777)) < 0) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("shmget ShmSysConfigAndInfo NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ } else if ((ShmSysConfigAndInfo = shmat(MeterSMId, NULL, 0)) == (void *) - 1) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("shmat ShmSysConfigAndInfo NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ } else
|
|
|
|
+ {}
|
|
|
|
+
|
|
|
|
+ //creat ShmStatusCodeData
|
|
|
|
+ if ((MeterSMId = shmget(ShmStatusCodeKey, sizeof(struct StatusCodeData), 0777)) < 0) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("shmget ShmStatusCodeData NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ } else if ((ShmStatusCodeData = shmat(MeterSMId, NULL, 0)) == (void *) - 1) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("shmat ShmStatusCodeData NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ } else
|
|
|
|
+ {}
|
|
|
|
+
|
|
|
|
+ //creat Audi customization info
|
|
|
|
+ if ((MeterSMId = shmget(ShmSelectGunInfoKey, sizeof(SelectGunInfo), IPC_CREAT | 0777)) < 0) {
|
|
|
|
+ log_error("[main]CreatShareMemory:shmget select gun info NG ");
|
|
|
|
+ return 0;
|
|
|
|
+ } else if ((ShmSelectGunInfo = shmat(MeterSMId, NULL, 0)) == (void *) - 1) {
|
|
|
|
+ log_error("[main]CreatShareMemory:shmat shmget select gun info ");
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //creat ShmStatusCodeData
|
|
|
|
+ if ((MeterSMId = shmget(ShmPrimaryMcuKey, sizeof(struct PrimaryMcuData), 0777)) < 0) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("shmget ShmPrimaryMcuData NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ } else if ((ShmPrimaryMcuData = shmat(MeterSMId, NULL, 0)) == (void *) - 1) {
|
|
|
|
+#ifdef ShmPrimaryMcuData
|
|
|
|
+ log_error("shmat ShmPrimaryMcuData NG");
|
|
|
|
+#endif
|
|
|
|
+ result = FAIL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+#endif //0
|
|
|
|
+
|
|
|
|
+//==========================================
|
|
|
|
+// Open and Close RS232 and R/W
|
|
|
|
+//==========================================
|
|
|
|
+int CreateCommunicationLcmPort()
|
|
|
|
+{
|
|
|
|
+ int fd;
|
|
|
|
+ struct termios tios;
|
|
|
|
+
|
|
|
|
+ fd = open(pPortName, O_RDWR);
|
|
|
|
+ if (fd <= 0) {
|
|
|
|
+#ifdef SystemLogMessage
|
|
|
|
+ log_error("open /dev/ttyS3 NG ");
|
|
|
|
+#endif
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ ioctl(fd, TCGETS, &tios);
|
|
|
|
+ tios.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
|
|
|
|
+ tios.c_lflag = 0;
|
|
|
|
+ tios.c_iflag = 0;
|
|
|
|
+ tios.c_oflag = 0;
|
|
|
|
+ tios.c_cc[VMIN] = 0;
|
|
|
|
+ tios.c_cc[VTIME] = (uint8_t) 5;
|
|
|
|
+ tios.c_lflag = 0;
|
|
|
|
+ tcflush(fd, TCIFLUSH);
|
|
|
|
+ ioctl(fd, TCSETS, &tios);
|
|
|
|
+
|
|
|
|
+ return fd;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void CloseCommunicationLcmPort()
|
|
|
|
+{
|
|
|
|
+ close(_port);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void WriteCmdToLcm(uint8_t *cmd, uint8_t cmdLen)
|
|
|
|
+{
|
|
|
|
+ int len = write(_port, cmd, cmdLen);
|
|
|
|
+ if (len >= sizeof(cmd)) {
|
|
|
|
+ //log_info("Write cmd to LCM successfully. ");
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ReadMsgFromLcm(uint8_t *msg, uint8_t readLen)
|
|
|
|
+{
|
|
|
|
+ read(_port, msg, readLen);
|
|
|
|
+
|
|
|
|
+ if (*msg == CMD_TITLE_1 && *(msg + 1) == CMD_TITLE_2) {
|
|
|
|
+ if (*(msg + 3) == CMD_WRITE) {
|
|
|
|
+ switch (*(msg + 4)) {
|
|
|
|
+ case CMD_REGISTER: {
|
|
|
|
+ // 頁面
|
|
|
|
+ strcpy((char *)pSysInfo->LcmHwRev, moduleName);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ } else if (*(msg + 3) == CMD_MULTI_READ) {
|
|
|
|
+// switch ((unsigned short) (*(msg + 4) << 8) + (unsigned short) *(msg + 5))
|
|
|
|
+// {
|
|
|
|
+// case BUTTON_GUN_INDEX:
|
|
|
|
+// {
|
|
|
|
+// // 當前選的槍號
|
|
|
|
+// _curGunIndex = (*(msg + 8));
|
|
|
|
+// }
|
|
|
|
+// break;
|
|
|
|
+// }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// Function
|
|
|
|
+//================================================
|
|
|
|
+void ChangeToOtherPage(short newPage)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[7];
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ cmd[0] = CMD_TITLE_1;
|
|
|
|
+ cmd[1] = CMD_TITLE_2;
|
|
|
|
+ cmd[2] = 0x02 + sizeof(newPage);
|
|
|
|
+ cmd[3] = CMD_READ;
|
|
|
|
+ cmd[4] = CMD_REGISTER;
|
|
|
|
+ cmd[5] = newPage >> 8;
|
|
|
|
+ cmd[6] = newPage & 0x00FF;
|
|
|
|
+
|
|
|
|
+ WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
|
|
|
|
+ usleep(100000);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeBackLight(bool islight)
|
|
|
|
+{
|
|
|
|
+ uint8_t value = 0x01;
|
|
|
|
+
|
|
|
|
+ if (islight) {
|
|
|
|
+ value = 0x20;
|
|
|
|
+ }
|
|
|
|
+ uint8_t cmd[7];
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ cmd[0] = CMD_TITLE_1;
|
|
|
|
+ cmd[1] = CMD_TITLE_2;
|
|
|
|
+ cmd[2] = 0x03;
|
|
|
|
+ cmd[3] = CMD_READ;
|
|
|
|
+ cmd[4] = CMD_BACKLIGHT;
|
|
|
|
+ cmd[5] = value;
|
|
|
|
+
|
|
|
|
+ WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
|
|
|
|
+ usleep(5000);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void GetCurrentPage()
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[6];
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ uint8_t msg[8];
|
|
|
|
+ memset(msg, 0x00, sizeof(msg));
|
|
|
|
+
|
|
|
|
+ cmd[0] = CMD_TITLE_1;
|
|
|
|
+ cmd[1] = CMD_TITLE_2;
|
|
|
|
+ cmd[2] = 0x03; // 底下總長度
|
|
|
|
+ cmd[3] = CMD_WRITE;
|
|
|
|
+ cmd[4] = CMD_REGISTER;
|
|
|
|
+ cmd[5] = 0x02;
|
|
|
|
+
|
|
|
|
+ WriteCmdToLcm(cmd, ARRAY_SIZE(cmd));
|
|
|
|
+ usleep(5000);
|
|
|
|
+ ReadMsgFromLcm(msg, ARRAY_SIZE(msg));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayValueToLcm(short address, uint8_t *data, uint8_t len)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[256];
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ cmd[0] = CMD_TITLE_1;
|
|
|
|
+ cmd[1] = CMD_TITLE_2;
|
|
|
|
+ cmd[2] = 0x03 + len;
|
|
|
|
+ cmd[3] = CMD_MULTI_WRITE;
|
|
|
|
+ cmd[4] = address >> 8;
|
|
|
|
+ cmd[5] = address & 0x00FF;
|
|
|
|
+
|
|
|
|
+ for (uint8_t count = 0; count < len; count++) {
|
|
|
|
+ cmd[6 + count] = *(data + count);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ WriteCmdToLcm(cmd, cmd[2] + 3);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeDisplay2Value(short address, short value)
|
|
|
|
+{
|
|
|
|
+ uint8_t data[2];
|
|
|
|
+ data[0] = value >> 8;
|
|
|
|
+ data[1] = value & 0x00FF;
|
|
|
|
+
|
|
|
|
+ DisplayValueToLcm(address, data, sizeof(data));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void GetBtnStatus(short address, uint8_t len)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[8];
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ uint8_t msg[8];
|
|
|
|
+ memset(msg, 0x00, sizeof(msg));
|
|
|
|
+
|
|
|
|
+ cmd[0] = CMD_TITLE_1;
|
|
|
|
+ cmd[1] = CMD_TITLE_2;
|
|
|
|
+ cmd[2] = 0x03 + len;
|
|
|
|
+ cmd[3] = CMD_MULTI_READ;
|
|
|
|
+ cmd[4] = address >> 8;
|
|
|
|
+ cmd[5] = address & 0x00FF;
|
|
|
|
+ cmd[6] = 0x00 + len;
|
|
|
|
+
|
|
|
|
+ WriteCmdToLcm(cmd, cmd[2] + 3);
|
|
|
|
+ usleep(100000);
|
|
|
|
+ ReadMsgFromLcm(msg, (len * 2) + sizeof(msg));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// Warning process
|
|
|
|
+//================================================
|
|
|
|
+void string2ByteArray(uint8_t *input, uint8_t *output)
|
|
|
|
+{
|
|
|
|
+ int loop;
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ loop = 0;
|
|
|
|
+ i = 0;
|
|
|
|
+
|
|
|
|
+ while (input[loop] != '\0') {
|
|
|
|
+ output[i++] = input[loop++];
|
|
|
|
+ }
|
|
|
|
+ output[loop] = '\0';
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeWarningFunc()
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[7] = {0};
|
|
|
|
+ uint8_t i = 0;
|
|
|
|
+ //uint8_t j = 0;
|
|
|
|
+ //log_info("ChangeWarningFunc ");
|
|
|
|
+ // 最多一次五筆
|
|
|
|
+ //log_info("LCM PageIndex = %d ", pSysWarning->PageIndex);
|
|
|
|
+ //log_info("WarningCount = %d ", pSysWarning->WarningCount);
|
|
|
|
+//#if !defined DD360 && !defined DD360Audi && !defined DD360ComBox
|
|
|
|
+ for (i = 0; (i + pSysWarning->PageIndex * 5) < pSysWarning->WarningCount; i++) {
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ if ((i) >= 5) {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //error code
|
|
|
|
+ string2ByteArray(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], cmd);
|
|
|
|
+ DisplayValueToLcm(0x0010 + ((i) * 6), cmd, sizeof(cmd));
|
|
|
|
+ //警告標示
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ cmd[0] = 0x00;
|
|
|
|
+ cmd[1] = 0x01;
|
|
|
|
+ DisplayValueToLcm(0x0002 + ((i) * 2), cmd, 2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ for (; i < 5; i++) {
|
|
|
|
+ DisplayValueToLcm(0x0010 + ((i) * 6), cmd, sizeof(cmd));
|
|
|
|
+ DisplayValueToLcm(0x0002 + ((i) * 2), cmd, 2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*#else
|
|
|
|
+ for (i = 0; (i + pSysWarning->PageIndex * 5) < pSysWarning->WarningCount; i++) {
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ if ((i - j) >= 5) {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "033900", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "033901", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "033902", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043627", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043628", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043622", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043623", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043624", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043625", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "043626", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "042241", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], "042242", 6) == 0)
|
|
|
|
+ ) {
|
|
|
|
+ j++;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ //error code
|
|
|
|
+ string2ByteArray(&pSysWarning->WarningCode[i + pSysWarning->PageIndex * 5][0], cmd);
|
|
|
|
+ DisplayValueToLcm(0x0010 + ((i - j) * 6), cmd, sizeof(cmd));
|
|
|
|
+ //警告標示
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ cmd[0] = 0x00;
|
|
|
|
+ cmd[1] = 0x01;
|
|
|
|
+ DisplayValueToLcm(0x0002 + ((i - j) * 2), cmd, 2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ i = i - j;
|
|
|
|
+ for (; (i) < 5; i++) {
|
|
|
|
+ DisplayValueToLcm(0x0010 + ((i) * 6), cmd, sizeof(cmd));
|
|
|
|
+ DisplayValueToLcm(0x0002 + ((i) * 2), cmd, 2);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endif //!defined DD360 && !defined DD360Audi
|
|
|
|
+ */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// QR Code process
|
|
|
|
+//================================================
|
|
|
|
+void ChangeQrCode_Idle(char *input)
|
|
|
|
+{
|
|
|
|
+#if defined DD360Audi
|
|
|
|
+ int len = strlen(input) + 3;
|
|
|
|
+ int loop = 0;
|
|
|
|
+ int i = 0, j = 0, k = 0, l = 0;
|
|
|
|
+ uint8_t qrUrl[128] = {0};
|
|
|
|
+ uint16_t urlLen = 0;
|
|
|
|
+ uint8_t cmd[len];
|
|
|
|
+ uint8_t tmpBuf[15] = {0};
|
|
|
|
+ //uint8_t tmpLen = sizeof(tmpBuf) - 1;
|
|
|
|
+
|
|
|
|
+ strncpy((char *)cmd, " ", len);
|
|
|
|
+
|
|
|
|
+ while (input[loop] != '\0') {
|
|
|
|
+ cmd[i++] = input[loop++];
|
|
|
|
+ l = loop - 1;
|
|
|
|
+ if (len >= 25) {
|
|
|
|
+ if (i >= 16 && i <= 19) {
|
|
|
|
+ tmpBuf[k++] = input[l];
|
|
|
|
+ //printf("tmpBuf = %s", tmpBuf);
|
|
|
|
+ } else if (i >= 21 && i <= 23) {
|
|
|
|
+ tmpBuf[k++] = input[l];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tmpBuf[k] = '\0';
|
|
|
|
+ //printf("tmpBuf = %s", tmpBuf);
|
|
|
|
+ j += sprintf((char *)&cmd[i], ":%d", pSysInfo->CurGunSelected); ////For Audi
|
|
|
|
+ cmd[len - 1] = '\0';
|
|
|
|
+ urlLen = sprintf((char *)qrUrl, "%s%s", NOODOE_QR_CODE_URL, cmd);
|
|
|
|
+ qrUrl[urlLen] = '\0';
|
|
|
|
+ //printf("qr url = %s", qrUrl);
|
|
|
|
+ DisplayValueToLcm(__qr_code, qrUrl, urlLen);
|
|
|
|
+
|
|
|
|
+ j = 0;
|
|
|
|
+ j += sprintf((char *)&tmpBuf[k], "0%d", pSysInfo->CurGunSelected); ////For Audi
|
|
|
|
+ tmpBuf[k + j] = '\0';
|
|
|
|
+
|
|
|
|
+ //if (len < 25) {
|
|
|
|
+ // strncpy((char *)tmpBuf, (char *)cmd, sizeof(tmpBuf));
|
|
|
|
+ //}
|
|
|
|
+ //tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+
|
|
|
|
+ /*if (len > sizeof(tmpBuf)) {
|
|
|
|
+ strncpy((char *)tmpBuf, (char *)cmd, sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+
|
|
|
|
+ memset(tmpBuf, 0, sizeof(tmpBuf));
|
|
|
|
+ strncpy((char *)tmpBuf, (char *)&cmd[tmpLen], sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL2, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+ } else {
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, cmd, len);
|
|
|
|
+
|
|
|
|
+ strncpy((char *)tmpBuf, " ", sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL2, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+#else
|
|
|
|
+ int len = strlen(input);
|
|
|
|
+ uint8_t cmd[len];
|
|
|
|
+
|
|
|
|
+ int loop = 0;
|
|
|
|
+ int i = 0;
|
|
|
|
+
|
|
|
|
+ while (input[loop] != '\0') {
|
|
|
|
+ cmd[i++] = input[loop++];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DisplayValueToLcm(__qr_code, cmd, len + 1);
|
|
|
|
+#endif //defined DD360Audi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeQrCode_Charge(char *input)
|
|
|
|
+{
|
|
|
|
+#if defined DD360Audi
|
|
|
|
+ int len = strlen(input) + 3;
|
|
|
|
+ int loop = 0;
|
|
|
|
+ int i = 0, j = 0, k = 0, l = 0;
|
|
|
|
+ uint8_t qrUrl[128] = {0};
|
|
|
|
+ uint16_t urlLen = 0;
|
|
|
|
+ uint8_t cmd[len];
|
|
|
|
+ uint8_t tmpBuf[15] = {0};
|
|
|
|
+ //uint8_t tmpLen = sizeof(tmpBuf) - 1;
|
|
|
|
+
|
|
|
|
+ strncpy((char *)cmd, " ", len);
|
|
|
|
+
|
|
|
|
+ while (input[loop] != '\0') {
|
|
|
|
+ cmd[i++] = input[loop++];
|
|
|
|
+ l = loop - 1;
|
|
|
|
+ if (len >= 25) {
|
|
|
|
+ if (i >= 16 && i <= 19) {
|
|
|
|
+ tmpBuf[k++] = input[l];
|
|
|
|
+ //printf("tmpBuf = %s", tmpBuf);
|
|
|
|
+ } else if (i >= 21 && i <= 23) {
|
|
|
|
+ tmpBuf[k++] = input[l];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tmpBuf[k] = '\0';
|
|
|
|
+ //printf("tmpBuf = %s", tmpBuf);
|
|
|
|
+ j += sprintf((char *)&cmd[i], ":%d", pSysInfo->CurGunSelected); ////For Audi
|
|
|
|
+ cmd[len - 1] = '\0';
|
|
|
|
+ urlLen = sprintf((char *)qrUrl, "%s%s", NOODOE_QR_CODE_URL, cmd);
|
|
|
|
+ qrUrl[urlLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__qr_code, qrUrl, urlLen);
|
|
|
|
+
|
|
|
|
+ j = 0;
|
|
|
|
+ j += sprintf((char *)&tmpBuf[k], "0%d", pSysInfo->CurGunSelected); ////For Audi
|
|
|
|
+ tmpBuf[k + j] = '\0';
|
|
|
|
+
|
|
|
|
+ if (len < 25) {
|
|
|
|
+ strncpy((char *)tmpBuf, (char *)cmd, sizeof(tmpBuf));
|
|
|
|
+ }
|
|
|
|
+ //tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+ /*if (len > sizeof(tmpBuf)) {
|
|
|
|
+ strncpy((char *)tmpBuf, (char *)cmd, sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+
|
|
|
|
+ memset(tmpBuf, 0, sizeof(tmpBuf));
|
|
|
|
+ strncpy((char *)tmpBuf, (char *)&cmd[tmpLen], sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL2, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+ } else {
|
|
|
|
+ DisplayValueToLcm(__custStationIdL1, cmd, len);
|
|
|
|
+
|
|
|
|
+ strncpy((char *)tmpBuf, " ", sizeof(tmpBuf));
|
|
|
|
+ tmpBuf[tmpLen] = '\0';
|
|
|
|
+ DisplayValueToLcm(__custStationIdL2, tmpBuf, sizeof(tmpBuf));
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+#else
|
|
|
|
+ int len = strlen(input);
|
|
|
|
+ uint8_t cmd[len];
|
|
|
|
+
|
|
|
|
+ int loop = 0;
|
|
|
|
+ int i = 0;
|
|
|
|
+
|
|
|
|
+ while (input[loop] != '\0') {
|
|
|
|
+ cmd[i++] = input[loop++];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DisplayValueToLcm(__qr_code_pre, cmd, len + 1);
|
|
|
|
+#endif //defined DD360Audi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// Change current page
|
|
|
|
+//================================================
|
|
|
|
+void ChangeCurPage()
|
|
|
|
+{
|
|
|
|
+ //log_info("cur = %d, new = %d ", _currentPage, pSysInfo->PageIndex);
|
|
|
|
+ if (_currentPage != pSysInfo->PageIndex) {
|
|
|
|
+ _currentPage = pSysInfo->PageIndex;
|
|
|
|
+ ChangeToOtherPage(_currentPage);
|
|
|
|
+ _everyPageRollChange = 0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// Main process
|
|
|
|
+//================================================
|
|
|
|
+uint8_t demoCount = 0;
|
|
|
|
+void DemoFunction()
|
|
|
|
+{
|
|
|
|
+ if (demoCount == 0) {
|
|
|
|
+ pSysWarning->WarningCount = 6;
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[0][0], "000001", 7);
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[1][0], "000002", 7);
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[2][0], "000003", 7);
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[3][0], "000004", 7);
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[4][0], "000005", 7);
|
|
|
|
+ memcpy(&pSysWarning->WarningCode[5][0], "000006", 7);
|
|
|
|
+ } else {
|
|
|
|
+ if (demoCount == 20) {
|
|
|
|
+ pSysInfo->PageIndex = _LCM_VIEW;
|
|
|
|
+ } else if (demoCount == 80) {
|
|
|
|
+ pSysInfo->PageIndex = _LCM_START_AUTHORIZING;
|
|
|
|
+ } else if (demoCount == 100) {
|
|
|
|
+ //pSysInfo->PageIndex = _LCM_AUTHORIZ_COMP;
|
|
|
|
+ } else if (demoCount == 120) {
|
|
|
|
+ pSysInfo->PageIndex = _LCM_WAIT_PLUGIN;
|
|
|
|
+ } else if (demoCount == 140) {
|
|
|
|
+ pSysInfo->PageIndex = _LCM_LINK_ERROR;
|
|
|
|
+ } else if (demoCount == 180) {
|
|
|
|
+ pSysInfo->PageIndex = _LCM_DETAIL_VIEW;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (demoCount < 180) {
|
|
|
|
+ demoCount++;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//================================================
|
|
|
|
+// Main process
|
|
|
|
+//================================================
|
|
|
|
+bool FindChargingInfoData(uint8_t target, struct ChargingInfoData **_chargingData)
|
|
|
|
+{
|
|
|
|
+ for (uint8_t index = 0; index < CHAdeMO_QUANTITY; index++) {
|
|
|
|
+ if (pSysInfo->ChademoChargingData[index].Index == target) {
|
|
|
|
+ _chargingData[target] = &pSysInfo->ChademoChargingData[index];
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (uint8_t index = 0; index < CCS_QUANTITY; index++) {
|
|
|
|
+ if (pSysInfo->CcsChargingData[index].Index == target) {
|
|
|
|
+ _chargingData[target] = &pSysInfo->CcsChargingData[index];
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for (uint8_t index = 0; index < GB_QUANTITY; index++) {
|
|
|
|
+ if (pSysInfo->GbChargingData[index].Index == target) {
|
|
|
|
+ _chargingData[target] = &pSysInfo->GbChargingData[index];
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool FindAcChargingInfoData(uint8_t target, struct ChargingInfoData **acChargingData)
|
|
|
|
+{
|
|
|
|
+ if (target < AC_QUANTITY) {
|
|
|
|
+ acChargingData[target] = &pSysInfo->AcChargingData[target];
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+int GetTimeoutValue(struct timespec *startTime)
|
|
|
|
+{
|
|
|
|
+ struct timespec endTime;
|
|
|
|
+ clock_gettime(CLOCK_MONOTONIC_COARSE, &endTime);
|
|
|
|
+ return endTime.tv_sec - startTime->tv_sec;
|
|
|
|
+}
|
|
|
|
+void GetTimespecFunc(struct timespec *time)
|
|
|
|
+{
|
|
|
|
+ clock_gettime(CLOCK_MONOTONIC_COARSE, time);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void RunReplugStringFunction(bool isRun)
|
|
|
|
+{
|
|
|
|
+ if (isRun) {
|
|
|
|
+ int time = GetTimeoutValue(&showReplugStrTimer);
|
|
|
|
+ if (time >=1 && time <2) {
|
|
|
|
+ ChangeDisplay2Value(__show_replugString_value, _showReplugStr_1);
|
|
|
|
+ } else if (time < 1) {
|
|
|
|
+ ChangeDisplay2Value(__show_replugString_value, _showReplugStr_2);
|
|
|
|
+ } else
|
|
|
|
+ GetTimespecFunc(&showReplugStrTimer);
|
|
|
|
+
|
|
|
|
+ } else
|
|
|
|
+ ChangeDisplay2Value(__show_replugString_value, _disappear);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * [ChangeBalanceValue :print balance information]
|
|
|
|
+ * @Author
|
|
|
|
+ * @DateTime 2020-11-26
|
|
|
|
+ */
|
|
|
|
+static void ChangeBalanceValue(uint16_t addr, uint8_t index) ////For Audi
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[10] = {0};
|
|
|
|
+ uint8_t value[10] = {0};
|
|
|
|
+ uint8_t len = 0;
|
|
|
|
+ float balance = ShmSelectGunInfo->PricesInfo[index].Balance;
|
|
|
|
+
|
|
|
|
+ if ((balance) == (FAIL_BALANCE_PRICES)) {
|
|
|
|
+ balance = 0.00;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ len += sprintf((char *) value, "%.2f", balance);
|
|
|
|
+ if (len < 6) {
|
|
|
|
+ sprintf((char *)&value[len], "%s",
|
|
|
|
+ (uint8_t *)GetCurrency(pSysConfig->BillingData.Currency));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ value[sizeof(value) - 1] = '\0';
|
|
|
|
+
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(addr, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeAcBattMapAndValue(short page)
|
|
|
|
+{
|
|
|
|
+ pAcChargingInfo = (struct ChargingInfoData *)GetAcChargingInfoData(0);
|
|
|
|
+
|
|
|
|
+ if (page == _LCM_VIEW) {
|
|
|
|
+ if (isDiffStatus != _battery_display_ani) {
|
|
|
|
+ isChangeBattMap = false;
|
|
|
|
+ isDiffStatus = _battery_display_ani;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pAcChargingInfo->IsCharging && !isChangeBattMap) {
|
|
|
|
+ isChangeBattMap = true;
|
|
|
|
+ if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV5) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_empty);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_EMP;
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_EMP) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_20);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV1;
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV1) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_40);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV2;
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV2) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_60);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV3;
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV3) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_80);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV4;
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV4) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_100);
|
|
|
|
+ ac_ani_battery_level = _BATTERY_LEVEL_FOR_MAP_LV5;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (page == _LCM_SUMMARY) {
|
|
|
|
+ if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV5) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_20);
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_EMP) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_20);
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV1) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_40);
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV2) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_60);
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV3) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_80);
|
|
|
|
+ } else if (ac_ani_battery_level == _BATTERY_LEVEL_FOR_MAP_LV4) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_100);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__soc_value_charging, _disappear);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeBattMapAndValue(short page, int soc)
|
|
|
|
+{
|
|
|
|
+// srand(time(NULL));
|
|
|
|
+// int min = 10;
|
|
|
|
+// int max = 90;
|
|
|
|
+// soc = rand() % (max - min + 1) + min;
|
|
|
|
+
|
|
|
|
+ if (page == _LCM_PRECHARGE) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map_empty, _battery_empty);
|
|
|
|
+ } else if (page == _LCM_VIEW) {
|
|
|
|
+ if (soc < 20) {
|
|
|
|
+ if (_battery_display_ani) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_empty);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_20);
|
|
|
|
+ }
|
|
|
|
+ } else if (soc >= 20 && soc < 40) {
|
|
|
|
+ if (_battery_display_ani) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_20);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_40);
|
|
|
|
+ }
|
|
|
|
+ } else if (soc >= 40 && soc < 60) {
|
|
|
|
+ if (_battery_display_ani) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_40);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_60);
|
|
|
|
+ }
|
|
|
|
+ } else if (soc >= 60 && soc < 80) {
|
|
|
|
+ if (_battery_display_ani) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_60);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_80);
|
|
|
|
+ }
|
|
|
|
+ } else if (soc >= 80 && soc <= 100) {
|
|
|
|
+ if (_battery_display_ani) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_80); //DS60-120 add
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_cap_100);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (page == _LCM_SUMMARY) {
|
|
|
|
+ if (soc < 20) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_20);
|
|
|
|
+ } else if (soc >= 20 && soc < 40) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_40);
|
|
|
|
+ } else if (soc >= 40 && soc < 60) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_60);
|
|
|
|
+ } else if (soc >= 60 && soc < 80) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_80);
|
|
|
|
+ } else if (soc >= 80 && soc <= 100) {
|
|
|
|
+ ChangeDisplay2Value(__batt_map, _battery_soc_100);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ uint8_t cmd[5];
|
|
|
|
+ uint8_t value[5];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ sprintf((char *)value, "%d%%", soc);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__soc_value_charging, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeRemainTime(int sec)
|
|
|
|
+{
|
|
|
|
+ int h, m, s;
|
|
|
|
+ uint8_t cmd[10];
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+// srand(time(NULL));
|
|
|
|
+// int min = 0;
|
|
|
|
+// int max = 65536;
|
|
|
|
+// sec = rand() % (max - min + 1) + min;
|
|
|
|
+
|
|
|
|
+ h = (sec / 3600);
|
|
|
|
+ m = (sec - (3600 * h)) / 60;
|
|
|
|
+ s = (sec - (3600 * h) - (m * 60));
|
|
|
|
+ sprintf((char *)value, "%02d:%02d:%02d", h, m, s);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__remain_time_tx, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeChargingEnergyValue(float energy)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[10];
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ if (energy >= 0.05) {
|
|
|
|
+ energy -= 0.05;
|
|
|
|
+ }
|
|
|
|
+ sprintf((char *) value, "%.1f kWh", energy);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__total_out_eng_tx, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeChargingPowerValue(float pow)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[10];
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+// float min = 0.0;
|
|
|
|
+// float max = 50;
|
|
|
|
+// pow = (max - min) * rand() / (RAND_MAX + 1.0) + min;
|
|
|
|
+ sprintf((char *) value, "%.1f kW", pow);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__output_eng_tx, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeChargingFeeValue(float fee)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[10];
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ sprintf((char *) value, "%.2f", fee);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__charging_fee_tx, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayMoneyRate(float money)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[8];
|
|
|
|
+ uint8_t value[8];
|
|
|
|
+
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+
|
|
|
|
+ sprintf((char *) value, "%.2f", money);
|
|
|
|
+ string2ByteArray(value, cmd);
|
|
|
|
+ DisplayValueToLcm(__money_by_rate, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayMoneyCur(uint8_t *cur)
|
|
|
|
+{
|
|
|
|
+ uint8_t cmd[10] = {0};
|
|
|
|
+ uint8_t buf[10] = {0};
|
|
|
|
+ uint8_t len = 0;
|
|
|
|
+
|
|
|
|
+ *(cur + 3) = '\0';
|
|
|
|
+ memset(cmd, 0x00, sizeof(cmd));
|
|
|
|
+ len = sprintf((char *) buf, "%s/kWh", cur);
|
|
|
|
+ buf[len] = '\0';
|
|
|
|
+ string2ByteArray(buf, cmd);
|
|
|
|
+ DisplayValueToLcm(__money_rate, cmd, sizeof(cmd));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void RefreshPageAnimation(uint8_t value)
|
|
|
|
+{
|
|
|
|
+ switch (_currentPage) {
|
|
|
|
+ case _LCM_VIEW: {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _LCM_WAIT_PLUGIN: {
|
|
|
|
+ if (_everyPageRollChange == 0) {
|
|
|
|
+ ChangeDisplay2Value(__plug_in_arrow, _arrow_dark);
|
|
|
|
+ } else if (_everyPageRollChange == 15) {
|
|
|
|
+ ChangeDisplay2Value(__plug_in_arrow, _arrow_light);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _everyPageRollChange > 30 ? _everyPageRollChange = 0 : _everyPageRollChange++;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _LCM_PRECHARGE:
|
|
|
|
+ case _LCM_SUMMARY: {
|
|
|
|
+ if (_currentPage == _LCM_PRECHARGE) {
|
|
|
|
+ if (_everyPageRollChange == 0 || _everyPageRollChange == 22) {
|
|
|
|
+ ChangeDisplay2Value(__conn_line, _conn_map1);
|
|
|
|
+ } else if (_everyPageRollChange == 11 || _everyPageRollChange == 33) {
|
|
|
|
+ ChangeDisplay2Value(__conn_line, _conn_map2);
|
|
|
|
+ }
|
|
|
|
+ } else if (_currentPage == _LCM_VIEW) {
|
|
|
|
+ if (_everyPageRollChange == 0 || _everyPageRollChange == 22) {
|
|
|
|
+ ChangeDisplay2Value(__conn_line_chag, _charging_map1);
|
|
|
|
+ } else if (_everyPageRollChange == 11 || _everyPageRollChange == 33) {
|
|
|
|
+ ChangeDisplay2Value(__conn_line_chag, _charging_map2);
|
|
|
|
+ }
|
|
|
|
+ } else if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ if (_everyPageRollChange == 0) {
|
|
|
|
+ ChangeDisplay2Value(__conn_line_comp, _complete_map);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ _everyPageRollChange >= 45 ? _everyPageRollChange = 0 : _everyPageRollChange++;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void RefreshConnStatus()
|
|
|
|
+{
|
|
|
|
+ // Wifi priority is higher than Ethernet
|
|
|
|
+#if defined DD360 ||defined DD360Audi || defined DD360ComBox || defined DD360UCar
|
|
|
|
+ uint8_t i = 0;
|
|
|
|
+ uint8_t ehtStatus = 0;
|
|
|
|
+
|
|
|
|
+ for (i = 0; i < pSysWarning->WarningCount; i++) {
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
|
|
|
|
+ ehtStatus = 1;
|
|
|
|
+ //if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ // ShmSelectGunInfo->EthDevStatus.Ethernet = DEV_ST_ENABLE_NO_USE;
|
|
|
|
+ //}
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Backend == DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _disappear);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.Backend == DEV_ST_ENABLE_USE) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _connect);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.Backend == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _disconnect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ehtStatus == 1) {
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_disconnect);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_connect);
|
|
|
|
+ }
|
|
|
|
+ //if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_DISABLE) {
|
|
|
|
+ //} else if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_ENABLE_USE) {
|
|
|
|
+ // ChangeDisplay2Value(__ethernet_status, _eth_connect);
|
|
|
|
+ //} else if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ // ChangeDisplay2Value(__ethernet_status, _eth_disconnect);
|
|
|
|
+ //}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Wifi == DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_ENABLE_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, __3G4G_connect);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _3G4G_disconnect);
|
|
|
|
+ }
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.Wifi == DEV_ST_ENABLE_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_connect);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.Wifi == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_disconnect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Wifi != DEV_ST_DISABLE) {
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_ENABLE_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, __3G4G_connect);
|
|
|
|
+ } else if (ShmSelectGunInfo->EthDevStatus.FourG == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _3G4G_disconnect);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //uint8_t flag[4] = {0};
|
|
|
|
+
|
|
|
|
+ /*for (i = 0; i < pSysWarning->WarningCount; i++) {
|
|
|
|
+ //printf("status code = %s", &pSysWarning->WarningCode[i][0]);
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
|
|
|
|
+ flag[0] = 1;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "043625", 6) == 0) {
|
|
|
|
+ //disconnected from AP through WiFi
|
|
|
|
+ flag[1] = 1;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "043627", 6) == 0) { //wifi disabled
|
|
|
|
+ flag[1] = 2;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ((memcmp(&pSysWarning->WarningCode[i][0], "033900", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i][0], "033901", 6) == 0) ||
|
|
|
|
+ (memcmp(&pSysWarning->WarningCode[i][0], "033902", 6) == 0)) {
|
|
|
|
+ flag[2] = 1;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "043626", 6) == 0) {
|
|
|
|
+ //disconnected from APN through 3G/4G
|
|
|
|
+ flag[3] = 1;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "043628", 6) == 0) { //4g disabled
|
|
|
|
+ flag[3] = 2;
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (flag[0] == 1) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_disconnect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_connect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //ChangeDisplay2Value(__wifi_status, _disappear);
|
|
|
|
+ //ChangeDisplay2Value(__conn_status, _disappear);
|
|
|
|
+ //ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+
|
|
|
|
+ if (flag[1] == 1) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_disconnect);
|
|
|
|
+ } else if (flag[1] == 2) {
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_connect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (flag[2] == 1) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _disconnect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _connect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (flag[1] == 2) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+ if (flag[3] == 1) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _3G4G_disconnect);
|
|
|
|
+ } else if (flag[3] == 2) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, __3G4G_connect);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (flag[3] == 1) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _3G4G_disconnect);
|
|
|
|
+ } else if (flag[3] == 2) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, __3G4G_connect);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
+#else
|
|
|
|
+// eth
|
|
|
|
+ /*
|
|
|
|
+ if (pSysInfo->ethInternetConn == YES) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _ethernet_connect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _ethernet_disconnect);
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
+ uint8_t ehtStatus = 0;
|
|
|
|
+ int i;
|
|
|
|
+ for (i = 0; i < pSysWarning->WarningCount; i++) {
|
|
|
|
+ if (memcmp(&pSysWarning->WarningCode[i][0], "012304", 6) == 0) {
|
|
|
|
+ ehtStatus = 1;
|
|
|
|
+ //if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ // ShmSelectGunInfo->EthDevStatus.Ethernet = DEV_ST_ENABLE_NO_USE;
|
|
|
|
+ //}
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ehtStatus == 1) {
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_disconnect);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (ShmSelectGunInfo->EthDevStatus.Ethernet != DEV_ST_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _eth_connect);
|
|
|
|
+ }
|
|
|
|
+ //if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_DISABLE) {
|
|
|
|
+ //} else if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_ENABLE_USE) {
|
|
|
|
+ // ChangeDisplay2Value(__ethernet_status, _eth_connect);
|
|
|
|
+ //} else if (ShmSelectGunInfo->EthDevStatus.Ethernet == DEV_ST_ENABLE_NO_USE) {
|
|
|
|
+ // ChangeDisplay2Value(__ethernet_status, _eth_disconnect);
|
|
|
|
+ //}
|
|
|
|
+ }
|
|
|
|
+ // Wifi
|
|
|
|
+ if ((pSysConfig->ModelName[10] == 'W' ||
|
|
|
|
+ pSysConfig->ModelName[10] == 'D') &&
|
|
|
|
+ pSysConfig->AthInterface.WifiMode != _SYS_WIFI_MODE_DISABLE) {
|
|
|
|
+ if (pSysConfig->AthInterface.WifiNetworkConn == YES ||
|
|
|
|
+ pSysConfig->AthInterface.WifiMode == _SYS_WIFI_MODE_AP) {
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_connect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_disconnect);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _disappear);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ((pSysConfig->ModelName[10] == 'T' ||
|
|
|
|
+ pSysConfig->ModelName[10] == 'D') &&
|
|
|
|
+ pSysConfig->TelecomInterface.TelcomEnabled != NO) {
|
|
|
|
+ if (pSysConfig->AthInterface.WifiMode == _SYS_WIFI_MODE_DISABLE) {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+ // 3G/4G
|
|
|
|
+ if (pSysConfig->TelecomInterface.TelcomNetworkConn == YES)
|
|
|
|
+ { ChangeDisplay2Value(__3G4G_move_status, _3G4G_disconnect); }
|
|
|
|
+ else
|
|
|
|
+ { ChangeDisplay2Value(__3G4G_move_status, _3G4G_disconnect); }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ // 3G/4G
|
|
|
|
+ if (pSysConfig->TelecomInterface.TelcomNetworkConn == YES)
|
|
|
|
+ { ChangeDisplay2Value(__3G4G_status, _3G4G_disconnect); }
|
|
|
|
+
|
|
|
|
+ else
|
|
|
|
+ { ChangeDisplay2Value(__3G4G_status, _3G4G_disconnect); }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__3G4G_status, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__3G4G_move_status, _disappear);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 連線到後台
|
|
|
|
+ if (pSysInfo->OcppConnStatus == YES) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _connect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _disconnect);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*if (pSysConfig->AthInterface.WifiNetworkConn == YES ||
|
|
|
|
+ pSysConfig->AthInterface.WifiMode == _SYS_WIFI_MODE_AP) {
|
|
|
|
+ _wifi_conn_status = true;
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _wifi_connect);
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ _wifi_conn_status = false;
|
|
|
|
+ ChangeDisplay2Value(__wifi_status, _disappear);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!_wifi_conn_status) {
|
|
|
|
+ if (pSysConfig->TelecomInterface.TelcomNetworkConn == YES ||
|
|
|
|
+ pSysInfo->InternetConn == YES) {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _ethernet_connect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__ethernet_status, _ethernet_disconnect);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 連線到後台
|
|
|
|
+ if (pSysInfo->OcppConnStatus == YES) {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _connect);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__conn_status, _disconnect);
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
+#endif //defined DD360 || defined DD360Audi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+uint8_t FirstPageChanged()
|
|
|
|
+{
|
|
|
|
+ uint8_t result = NO;
|
|
|
|
+
|
|
|
|
+ if (_currentPage != _oldPage) {
|
|
|
|
+ result = YES;
|
|
|
|
+ _oldPage = _currentPage;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool IsPageReloadChk()
|
|
|
|
+{
|
|
|
|
+ bool result = false;
|
|
|
|
+
|
|
|
|
+ if (pSysInfo->CurGunSelectedByAc == NO_DEFINE) {
|
|
|
|
+ if (_curPage_index != pSysInfo->CurGunSelected) {
|
|
|
|
+ _curPage_index = pSysInfo->CurGunSelected;
|
|
|
|
+ result = true;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (_curPage_index != pSysInfo->CurGunSelectedByAc) {
|
|
|
|
+ _curPage_index = pSysInfo->CurGunSelectedByAc;
|
|
|
|
+ result = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ClearDisplayInfo()
|
|
|
|
+{
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_value, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_value, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__sn_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__sn_value, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_value, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_value, _disappear);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_value, _disappear);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoCsuVer(bool isShow, uint8_t *modelName)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *)value, "CSU Ver >");
|
|
|
|
+ DisplayValueToLcm(__csu_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strncpy((char *)value, (char *)modelName, 5);
|
|
|
|
+ DisplayValueToLcm(__csu_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ShowWifiMode(bool isShow, uint8_t mode)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Wifi Mo. >");
|
|
|
|
+ DisplayValueToLcm(__csu_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ if (mode == 0) {
|
|
|
|
+ sprintf((char *)value, "disable");
|
|
|
|
+ } else if (mode == 1) {
|
|
|
|
+ sprintf((char *)value, "station");
|
|
|
|
+ } else if (mode == 2) {
|
|
|
|
+ sprintf((char *)value, "AP");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DisplayValueToLcm(__csu_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__csu_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoEthIp(bool isShow, uint8_t *ip)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Eth IP >");
|
|
|
|
+ DisplayValueToLcm(__eth0_ip_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) ip);
|
|
|
|
+ DisplayValueToLcm(__eth0_ip_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Show4GRssi(bool isShow, int dbValue)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "RSSI >");
|
|
|
|
+ DisplayValueToLcm(__eth0_ip_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ sprintf((char *)value, "%d dBm", dbValue);
|
|
|
|
+ DisplayValueToLcm(__eth0_ip_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__eth0_ip_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoSN(bool isShow, uint8_t *sn)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[30];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "SN >");
|
|
|
|
+ DisplayValueToLcm(__sn_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) sn);
|
|
|
|
+ DisplayValueToLcm(__sn_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sn_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__sn_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ShowWifiRssi(bool isShow, int dbValue)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "RSSI >");
|
|
|
|
+ DisplayValueToLcm(__sn_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ sprintf((char *)value, "%d dBm", dbValue);
|
|
|
|
+ DisplayValueToLcm(__sn_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sn_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__sn_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoGun1Ver(bool isShow, uint8_t *version)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Ct1 Ver >");
|
|
|
|
+ DisplayValueToLcm(__dc1_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) version);
|
|
|
|
+ DisplayValueToLcm(__dc1_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Show4GMode(bool isShow, uint8_t mode)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "3/4G Mo. >");
|
|
|
|
+ DisplayValueToLcm(__dc1_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ if (mode == 0) {
|
|
|
|
+ sprintf((char *)value, "disable");
|
|
|
|
+ } else if (mode == 1) {
|
|
|
|
+ sprintf((char *)value, "enable");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DisplayValueToLcm(__dc1_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc1_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoGun2Ver(bool isShow, uint8_t *version)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Ct2 Ver >");
|
|
|
|
+ DisplayValueToLcm(__dc2_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) version);
|
|
|
|
+ DisplayValueToLcm(__dc2_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void Show4GIP(bool isShow, uint8_t *ip)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "3/4G IP >");
|
|
|
|
+ DisplayValueToLcm(__dc2_ver_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) ip);
|
|
|
|
+ DisplayValueToLcm(__dc2_ver_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__dc2_ver_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void DisplayInfoSpeed(bool isShow, unsigned int fan)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[10];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Fan Spd >");
|
|
|
|
+ DisplayValueToLcm(__fan_speed_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ sprintf((char *)value, "%d", fan);
|
|
|
|
+ DisplayValueToLcm(__fan_speed_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ShowWifiIP(bool isShow, uint8_t *ip)
|
|
|
|
+{
|
|
|
|
+ if (isShow) {
|
|
|
|
+ uint8_t value[20];
|
|
|
|
+
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, "Wifi IP >");
|
|
|
|
+ DisplayValueToLcm(__fan_speed_string, value, sizeof(value));
|
|
|
|
+ memset(value, 0x00, sizeof(value));
|
|
|
|
+ strcpy((char *) value, (char *) ip);
|
|
|
|
+ DisplayValueToLcm(__fan_speed_value, value, sizeof(value));
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_string, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__fan_speed_value, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void InformationShow()
|
|
|
|
+{
|
|
|
|
+ if (pSysConfig->ShowInformation == YES) {
|
|
|
|
+ bool show = _isShow = true;
|
|
|
|
+ if (_showInformIndex == 0) {
|
|
|
|
+ DisplayInfoCsuVer(show, pSysInfo->CsuRootFsFwRev);
|
|
|
|
+ DisplayInfoSpeed(show, pSysInfo->SystemFanRotaSpeed);
|
|
|
|
+ DisplayInfoSN(show, pSysConfig->SerialNumber);
|
|
|
|
+
|
|
|
|
+ DisplayInfoEthIp(show, pSysConfig->Eth0Interface.EthIpAddress);
|
|
|
|
+ DisplayInfoGun1Ver(show, pSysInfo->Connector1FwRev);
|
|
|
|
+ if (_totalCount > 1) {
|
|
|
|
+ DisplayInfoGun2Ver(show, pSysInfo->Connector2FwRev);
|
|
|
|
+ } else {
|
|
|
|
+ DisplayInfoGun2Ver(false, pSysInfo->Connector2FwRev);
|
|
|
|
+ }
|
|
|
|
+ } else if (_showInformIndex == 1) {
|
|
|
|
+ ShowWifiMode(show, pSysConfig->AthInterface.WifiMode);
|
|
|
|
+ ShowWifiIP(show, pSysConfig->AthInterface.WifiIpAddress);
|
|
|
|
+ ShowWifiRssi(show, pSysConfig->AthInterface.WifiRssi);
|
|
|
|
+
|
|
|
|
+ Show4GMode(show, pSysConfig->TelecomInterface.TelcomEnabled);
|
|
|
|
+ Show4GIP(show, pSysConfig->TelecomInterface.TelcomIpAddress);
|
|
|
|
+ Show4GRssi(show, pSysConfig->TelecomInterface.TelcomRssi);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ClearDisplayInfo();
|
|
|
|
+
|
|
|
|
+ if (_isShow) {
|
|
|
|
+ _isShow = false;
|
|
|
|
+ _showInformIndex++;
|
|
|
|
+ if (_showInformIndex >= 2) {
|
|
|
|
+ _showInformIndex = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ProcessPageInfo()
|
|
|
|
+{
|
|
|
|
+ _page_reload = IsPageReloadChk();
|
|
|
|
+ pAcChargingInfo = (struct ChargingInfoData *)GetAcChargingInfoData(0);
|
|
|
|
+
|
|
|
|
+ // 隨插即充 - 可省略該按鈕 //DS60-120 add
|
|
|
|
+ if (pSysConfig->AuthorisationMode == AUTH_MODE_ENABLE) {
|
|
|
|
+ ChangeDisplay2Value(__ret_home_btn, _back_home_btn);
|
|
|
|
+ if (_totalCount >= 2 && pSysInfo->IsAlternatvieConf == NO) {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _sel_gun_btn);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _disappear);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (_currentPage) {
|
|
|
|
+ case _LCM_VIEW: ////For Audi
|
|
|
|
+ case _LCM_DETAIL_VIEW:
|
|
|
|
+ if (pSysInfo->CurGunSelected == 0) {
|
|
|
|
+ ChangeDisplay2Value(__left_gun_map, _left_gun_enable_map);
|
|
|
|
+ ChangeDisplay2Value(__right_gun_map, _right_gun_disable_map);
|
|
|
|
+ } else if (pSysInfo->CurGunSelected == 1) {
|
|
|
|
+ ChangeDisplay2Value(__left_gun_map, _left_gun_disable_map);
|
|
|
|
+ ChangeDisplay2Value(__right_gun_map, _right_gun_enable_map);
|
|
|
|
+ }
|
|
|
|
+ ChangeDisplay2Value(__add_chk_btn, _select_gun_btn);
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case _LCM_START_SCAN:
|
|
|
|
+ case _LCM_STOP_RFID:
|
|
|
|
+ case _LCM_STOP_APP:
|
|
|
|
+ if (pSysConfig->isRFID) {
|
|
|
|
+ ChangeDisplay2Value(__main_rfid, _main_rfid);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__main_rfid, _main_none_rfid);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->isQRCode) {
|
|
|
|
+ ChangeDisplay2Value(__main_qr, _main_qr);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__qr_code, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__main_qr, _main_none_qr);
|
|
|
|
+ needReloadQr = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->isAPP) {
|
|
|
|
+ ChangeDisplay2Value(__main_app, _main_app);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__main_app, _main_none_app);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //if (FirstPageChanged() == YES || needReloadQr || _page_reload) {
|
|
|
|
+ if (pSysConfig->isQRCode) {
|
|
|
|
+ needReloadQr = false;
|
|
|
|
+ if (pSysConfig->QRCodeMadeMode == NO) {
|
|
|
|
+ //uint8_t len = strlen((char *)pSysConfig->SystemId);
|
|
|
|
+ ChangeQrCode_Idle((char *)pSysConfig->SystemId);
|
|
|
|
+ } else {
|
|
|
|
+ //uint8_t len = strlen((char *)pSysConfig->QRCodeContent);
|
|
|
|
+ ChangeQrCode_Idle((char *)pSysConfig->QRCodeContent);
|
|
|
|
+ }
|
|
|
|
+ //ChangeQrCode_Idle((char *)pSysConfig->SystemId);
|
|
|
|
+ }
|
|
|
|
+ //}
|
|
|
|
+
|
|
|
|
+ //DS60-120 add
|
|
|
|
+ bool isCharging = false;
|
|
|
|
+ for (uint8_t i = 0; i < _totalCount; i++) {
|
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i);
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_IDLE) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ isCharging = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ if (isCharging && pSysInfo->IsAlternatvieConf == NO) {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _sel_gun_btn);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _disappear);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _LCM_START_AUTHORIZING:
|
|
|
|
+ case _LCM_START_AUTHORIZE_FAIL:
|
|
|
|
+ case _LCM_STOP_RFID_FAIL:
|
|
|
|
+ case _LCM_LINK_ERROR:
|
|
|
|
+ //case _LCM_WAIT_FOR_PLUG: {
|
|
|
|
+ FirstPageChanged();
|
|
|
|
+ break;
|
|
|
|
+ case _LCM_WAIT_PLUGIN:
|
|
|
|
+ case _LCM_WAIT_PLUGOUT:
|
|
|
|
+ FirstPageChanged();
|
|
|
|
+ if (pSysConfig->AuthorisationMode == AUTH_MODE_DISABLE) {
|
|
|
|
+ // 新增隨插即充功能預設在等待插槍頁面在開啟
|
|
|
|
+ ChangeDisplay2Value(__ret_home_btn, _disappear);
|
|
|
|
+ bool isCharging = false;
|
|
|
|
+ for (uint8_t i = 0; i < _totalCount; i++) {
|
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i);
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_IDLE) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ isCharging = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (isCharging && pSysInfo->IsAlternatvieConf == NO) {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _sel_gun_btn);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _disappear);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _disappear);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _LCM_PRECHARGE:
|
|
|
|
+ case _LCM_STOPPING:
|
|
|
|
+ case _LCM_SUMMARY: {
|
|
|
|
+ bool isShowAc = false;
|
|
|
|
+ uint8_t gunTargetIndex = 0;
|
|
|
|
+
|
|
|
|
+ if (acgunCount > 0) {
|
|
|
|
+ gunTargetIndex = 2;
|
|
|
|
+ if (pSysInfo->CurGunSelectedByAc != NO_DEFINE) {
|
|
|
|
+ isShowAc = true;
|
|
|
|
+ //ChangeDisplay2Value(__gun_type_index + (2 * 2), _actype_light); //DS60-120 remove
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (gunTargetIndex * 2), _actype_light_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (gunTargetIndex * 2), _actype_light);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (_currentPage == _LCM_VIEW) {
|
|
|
|
+ ChangeAcBattMapAndValue(_LCM_VIEW);
|
|
|
|
+ if (pAcChargingInfo->PresentChargedDuration >= 0 &&
|
|
|
|
+ pAcChargingInfo->PresentChargedDuration <= TIME_MAX_SEC) {
|
|
|
|
+ ChangeRemainTime(pAcChargingInfo->PresentChargedDuration);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeRemainTime(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pAcChargingInfo->PresentChargingPower >= 0.1 &&
|
|
|
|
+ pAcChargingInfo->PresentChargingPower <= POWER_MAX_KW) {
|
|
|
|
+ ChangeChargingPowerValue(pAcChargingInfo->PresentChargingPower);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingPowerValue(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pAcChargingInfo->PresentChargedEnergy >= 0.1 &&
|
|
|
|
+ pAcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
|
|
|
|
+ ChangeChargingEnergyValue(pAcChargingInfo->PresentChargedEnergy);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingEnergyValue(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (strcmp((char *)pAcChargingInfo->StartUserId, "") == 0 ||
|
|
|
|
+ pSysConfig->StopChargingByButton == YES) {
|
|
|
|
+ ChangeDisplay2Value(__stop_method_btn, _stop_charging_btn);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__stop_method_btn, _stop_charging_btn_scan);
|
|
|
|
+ }
|
|
|
|
+ } else if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeAcBattMapAndValue(_LCM_SUMMARY);
|
|
|
|
+ if (pAcChargingInfo->PresentChargedDuration >= 0 &&
|
|
|
|
+ pAcChargingInfo->PresentChargedDuration <= TIME_MAX_SEC) {
|
|
|
|
+ ChangeRemainTime(pAcChargingInfo->PresentChargedDuration);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeRemainTime(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pAcChargingInfo->PresentChargingPower >= 0.1 &&
|
|
|
|
+ pAcChargingInfo->PresentChargingPower <= POWER_MAX_KW) {
|
|
|
|
+ ChangeChargingPowerValue(pAcChargingInfo->PresentChargingPower);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingPowerValue(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pAcChargingInfo->PresentChargedEnergy >= 0.1 &&
|
|
|
|
+ pAcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
|
|
|
|
+ ChangeChargingEnergyValue(pAcChargingInfo->PresentChargedEnergy);
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->BillingData.isBilling &&
|
|
|
|
+ pAcChargingInfo->ChargingFee >= 0) {
|
|
|
|
+ ChangeChargingFeeValue(pAcChargingInfo->ChargingFee);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingEnergyValue(0);
|
|
|
|
+ if (pSysConfig->BillingData.isBilling) {
|
|
|
|
+ ChangeChargingFeeValue(0);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!pSysConfig->BillingData.isBilling) {
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_map, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_tx, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_map, _money_map);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //ChangeDisplay2Value(__gun_type_index + (2 * 2), _actype_dark); //DS60-120 remove
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (gunTargetIndex * 2), _actype_dark_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (gunTargetIndex * 2), _actype_dark);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //ChangeDisplay2Value(__gun_type_index + (2 * 2), _disappear); //DS60-120 remove
|
|
|
|
+ if (_totalCount > 1) {
|
|
|
|
+ gunTargetIndex = 2;
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (gunTargetIndex * 2), _disappear);
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (gunTargetIndex * 2), _disappear);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ gunTargetIndex = 0; //DS60-120 add
|
|
|
|
+ for (uint8_t i = 0; i < _totalCount; i++) {
|
|
|
|
+ if (_totalCount == 1 && acgunCount <= 0) { //DS60-120 add
|
|
|
|
+ gunTargetIndex = 2;
|
|
|
|
+ } else {
|
|
|
|
+ gunTargetIndex = i;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(i);
|
|
|
|
+
|
|
|
|
+ switch (pDcChargingInfo->Type) {
|
|
|
|
+ case _Type_Chademo: {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i && !isShowAc) {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _chademo_light_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _chademo_light);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _chademo_dark_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _chademo_dark);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _Type_GB: {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i && !isShowAc) {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _gbt_light_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _gbt_light);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _gbt_dark_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _gbt_dark);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case _Type_CCS_2: {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i && !isShowAc) {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _ccs_light_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _ccs_light);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (_currentPage == _LCM_SUMMARY) {
|
|
|
|
+ ChangeDisplay2Value(__cmp_gun_type_index + (i * 2), _ccs_dark_cmp);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _ccs_dark);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (_currentPage == _LCM_PRECHARGE && !isShowAc) {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i) {
|
|
|
|
+ ChangeBattMapAndValue(_currentPage, pDcChargingInfo->EvBatterySoc);
|
|
|
|
+ }
|
|
|
|
+ } else if (_currentPage == _LCM_VIEW && !isShowAc) {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i) {
|
|
|
|
+ ChangeBattMapAndValue(_LCM_VIEW, pDcChargingInfo->EvBatterySoc);
|
|
|
|
+ if (pDcChargingInfo->PresentChargedDuration >= 0 &&
|
|
|
|
+ pDcChargingInfo->PresentChargedDuration <= TIME_MAX_SEC) {
|
|
|
|
+ ChangeRemainTime(pDcChargingInfo->PresentChargedDuration);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeRemainTime(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->PresentChargingPower >= 0 &&
|
|
|
|
+ pDcChargingInfo->PresentChargingPower <= POWER_MAX_KW) {
|
|
|
|
+ ChangeChargingPowerValue(pDcChargingInfo->PresentChargingPower);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingPowerValue(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->PresentChargedEnergy >= 0.1 &&
|
|
|
|
+ pDcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
|
|
|
|
+ ChangeChargingEnergyValue(pDcChargingInfo->PresentChargedEnergy);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingEnergyValue(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (strcmp((char *)pDcChargingInfo->StartUserId, "") == 0 ||
|
|
|
|
+ pSysConfig->StopChargingByButton == YES) {
|
|
|
|
+ ChangeDisplay2Value(__stop_method_btn, _stop_charging_btn);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__stop_method_btn, _stop_charging_btn_scan);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (_currentPage == _LCM_SUMMARY && !isShowAc) {
|
|
|
|
+ if (pSysInfo->CurGunSelected == i) {
|
|
|
|
+ ChangeBattMapAndValue(_LCM_SUMMARY, pDcChargingInfo->EvBatterySoc);
|
|
|
|
+ if (pDcChargingInfo->PresentChargedDuration >= 0 &&
|
|
|
|
+ pDcChargingInfo->PresentChargedDuration <= TIME_MAX_SEC) {
|
|
|
|
+ ChangeRemainTime(pDcChargingInfo->PresentChargedDuration);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeRemainTime(0);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->PresentChargingPower >= 0 &&
|
|
|
|
+ pDcChargingInfo->PresentChargingPower <= POWER_MAX_KW) {
|
|
|
|
+ ChangeChargingPowerValue(pDcChargingInfo->PresentChargingPower);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingPowerValue(0);
|
|
|
|
+ }
|
|
|
|
+#if 1
|
|
|
|
+ if (pDcChargingInfo->PresentChargedEnergy >= 0.1 &&
|
|
|
|
+ pDcChargingInfo->PresentChargedEnergy <= ENERGY_MAX_KWH) {
|
|
|
|
+ ChangeChargingEnergyValue(pDcChargingInfo->PresentChargedEnergy);
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->BillingData.isBilling &&
|
|
|
|
+ pDcChargingInfo->ChargingFee >= 0) {
|
|
|
|
+ ChangeChargingFeeValue(pDcChargingInfo->ChargingFee);
|
|
|
|
+ ChangeBalanceValue(__remain_balance, i);
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ ChangeChargingEnergyValue(0);
|
|
|
|
+ if (pSysConfig->BillingData.isBilling) {
|
|
|
|
+ ChangeChargingFeeValue(0);
|
|
|
|
+ ChangeBalanceValue(__remain_balance, i);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+#else
|
|
|
|
+ ChangeChargingEnergyValue(pDcChargingInfo->PresentChargedEnergy);
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->BillingData.isBilling &&
|
|
|
|
+ pDcChargingInfo->ChargingFee >= 0) {
|
|
|
|
+ ChangeChargingFeeValue(pDcChargingInfo->ChargingFee);
|
|
|
|
+ ChangeBalanceValue(__remain_balance, i);
|
|
|
|
+ }
|
|
|
|
+#endif // 0
|
|
|
|
+ if (!pSysConfig->BillingData.isBilling) {
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_map, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_tx, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__charging_fee_map, _money_map);
|
|
|
|
+ }
|
|
|
|
+#ifdef DD360Audi
|
|
|
|
+ // Warming Occur in prepare or precharing state, turn into complete mode
|
|
|
|
+ if (pDcChargingInfo->Replug_flag) {
|
|
|
|
+ RunReplugStringFunction(true);
|
|
|
|
+ } else {
|
|
|
|
+ RunReplugStringFunction(false);
|
|
|
|
+ }
|
|
|
|
+#else
|
|
|
|
+#endif
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // gun btn and QR code
|
|
|
|
+ if (_totalCount + acgunCount >= 2 && _currentPage) {
|
|
|
|
+ uint8_t index = 0;
|
|
|
|
+ for (index = 0; index < _totalCount; index++) {
|
|
|
|
+ if (pSysInfo->CurGunSelected != index) {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(index);
|
|
|
|
+
|
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_IDLE ||
|
|
|
|
+ pDcChargingInfo->SystemStatus == S_RESERVATION ||
|
|
|
|
+ pDcChargingInfo->SystemStatus == S_BOOTING) {
|
|
|
|
+ if (FirstPageChanged() == YES || needReloadQr || _page_reload) {
|
|
|
|
+ if (pSysConfig->isQRCode) {
|
|
|
|
+ needReloadQr = false;
|
|
|
|
+ //ChangeQrCode_Charge((char *)pSysConfig->SystemId); //DS60-120 remove
|
|
|
|
+ if (pSysConfig->QRCodeMadeMode == NO) {
|
|
|
|
+ //uint8_t len = strlen((char *)pSysConfig->SystemId);
|
|
|
|
+ ChangeQrCode_Charge((char *)pSysConfig->SystemId);
|
|
|
|
+ } else {
|
|
|
|
+ //uint8_t len = strlen((char *)pSysConfig->QRCodeContent);
|
|
|
|
+ ChangeQrCode_Charge((char *)pSysConfig->QRCodeContent);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case _LCM_ERROR:
|
|
|
|
+ case _LCM_MAINTAIN:
|
|
|
|
+ // AUDI_LCM_CHANGE
|
|
|
|
+ if (ShmPrimaryMcuData->InputDet.bits.EmergencyButton == 1) {
|
|
|
|
+ ChangeDisplay2Value(_emergency_map, _emergency_disable_map);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(_emergency_map, _disappear);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+void ChangeDisplayMoneyInfo()
|
|
|
|
+{
|
|
|
|
+ uint8_t curGun = pSysInfo->CurGunSelected;
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->BillingData.isBilling) {
|
|
|
|
+ struct timeb csuTime;
|
|
|
|
+ struct tm *tmCSU;
|
|
|
|
+
|
|
|
|
+ ftime(&csuTime);
|
|
|
|
+ tmCSU = localtime(&csuTime.time);
|
|
|
|
+
|
|
|
|
+ ChangeDisplay2Value(__money_rate_map, _charging_money);
|
|
|
|
+#if defined DD360Audi
|
|
|
|
+ if (ShmSelectGunInfo->PricesInfo[curGun].UserPrices != 0.00) { //Jerry add
|
|
|
|
+ DisplayMoneyRate(ShmSelectGunInfo->PricesInfo[curGun].UserPrices);
|
|
|
|
+ } else {
|
|
|
|
+#endif //defined DD360Audi
|
|
|
|
+ if (tmCSU->tm_hour <= 23) {
|
|
|
|
+ pSysConfig->BillingData.Cur_fee = pSysConfig->BillingData.Fee[tmCSU->tm_hour];
|
|
|
|
+ DisplayMoneyRate(pSysConfig->BillingData.Cur_fee);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pSysConfig->BillingData.Currency <= 53) {
|
|
|
|
+ DisplayMoneyCur((uint8_t *)GetCurrency(pSysConfig->BillingData.Currency));
|
|
|
|
+ }
|
|
|
|
+#if defined DD360Audi
|
|
|
|
+ }
|
|
|
|
+#endif //defined DD360Audi
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__money_rate_map, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__money_by_rate, _disappear);
|
|
|
|
+ ChangeDisplay2Value(__money_rate, _disappear);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*void Initialization()
|
|
|
|
+{
|
|
|
|
+ bool isPass = false;
|
|
|
|
+ uint8_t count = 5;
|
|
|
|
+ while (!isPass && count > 0) {
|
|
|
|
+ isPass = true;
|
|
|
|
+ for (uint8_t _index = 0; _index < _totalCount; _index++) {
|
|
|
|
+ if (!FindChargingInfoData(_index, &_chargingInfoData[0])) {
|
|
|
|
+ log_error("LcmComm (main) : FindChargingInfoData false ");
|
|
|
|
+ isPass = false;
|
|
|
|
+ count--;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sleep(1);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ isPass = false;
|
|
|
|
+
|
|
|
|
+ if (acgunCount > 0) {
|
|
|
|
+ while (!isPass) {
|
|
|
|
+ isPass = true;
|
|
|
|
+ for (uint8_t _index = 0; _index < acgunCount; _index++) {
|
|
|
|
+ if (!FindAcChargingInfoData(_index, &ac_chargingInfo[0])) {
|
|
|
|
+ log_error("LcmComm : FindAcChargingInfoData false ");
|
|
|
|
+ isPass = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ sleep(1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (count == 0) {
|
|
|
|
+ log_info("LCM Initialization Gun Fail.............");
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+*/
|
|
|
|
+
|
|
|
|
+//DS60-120 add
|
|
|
|
+void DefaultIconStatus()
|
|
|
|
+{
|
|
|
|
+ for (uint8_t i = 0; i < 3; i++) {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _disappear);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (pSysInfo->IsAlternatvieConf == YES || _totalCount == 1) {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _disappear);
|
|
|
|
+ } else {
|
|
|
|
+ ChangeDisplay2Value(__sel_gun_btn, _sel_gun_btn);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+int main(void)
|
|
|
|
+{
|
|
|
|
+
|
|
|
|
+ //if (InitShareMemory() == FAIL) {
|
|
|
|
+ // log_error("InitShareMemory NG");
|
|
|
|
+ //
|
|
|
|
+ // if (ShmStatusCodeData != NULL) {
|
|
|
|
+ // ShmStatusCodeData->AlarmCode.AlarmEvents.bits.FailToCreateShareMemory = 1;
|
|
|
|
+ // }
|
|
|
|
+ // sleep(5);
|
|
|
|
+ // return 0;
|
|
|
|
+ //}
|
|
|
|
+
|
|
|
|
+ if (CreateAllCsuShareMemory() == FAIL) {
|
|
|
|
+ log_error("create share memory error");
|
|
|
|
+ return FAIL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MappingGunChargingInfo("LCM Control Task");
|
|
|
|
+
|
|
|
|
+ pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
|
|
|
|
+ pSysInfo = (struct SysInfoData *)GetShmSysInfoData();
|
|
|
|
+ pSysWarning = (struct WARNING_CODE_INFO *)GetShmSysWarningInfo();
|
|
|
|
+ ShmFanModuleData = (struct FanModuleData *)GetShmFanModuleData();;
|
|
|
|
+ ShmPrimaryMcuData = (struct PrimaryMcuData *)GetShmPrimaryMcuData();
|
|
|
|
+ ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
|
|
|
|
+ struct StatusCodeData *ShmStatusCodeData = (struct StatusCodeData *)GetShmStatusCodeData();;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ _port = CreateCommunicationLcmPort();
|
|
|
|
+ uint8_t changeWarningPriority = 0;
|
|
|
|
+ uint8_t curWarningCount = 255;
|
|
|
|
+ ChangeBackLight(true);
|
|
|
|
+ _totalCount = pSysConfig->TotalConnectorCount;
|
|
|
|
+ acgunCount = pSysConfig->AcConnectorCount;
|
|
|
|
+ //Initialization();
|
|
|
|
+
|
|
|
|
+ //printf("_LCM_COMPLETE ");
|
|
|
|
+ //ChangeToOtherPage(_LCM_COMPLETE);
|
|
|
|
+ //return 0;
|
|
|
|
+
|
|
|
|
+ for (uint8_t i = 0; i < 3; i++) {
|
|
|
|
+ ChangeDisplay2Value(__gun_type_index + (i * 2), _disappear);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DefaultIconStatus(); //DS60-120 add
|
|
|
|
+
|
|
|
|
+ while (_port != -1) {
|
|
|
|
+ if (strcmp((char *)pSysInfo->LcmHwRev, moduleName) != 0x00) {
|
|
|
|
+ GetCurrentPage();
|
|
|
|
+ sleep(1);
|
|
|
|
+#ifndef DD360ComBox
|
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = true;
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ //DemoFunction();
|
|
|
|
+#ifndef DD360ComBox
|
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = false;
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ // Warning 處理
|
|
|
|
+ if (curWarningCount != pSysWarning->WarningCount) {
|
|
|
|
+ changeWarningPriority = 0;
|
|
|
|
+ pSysWarning->PageIndex = 0;
|
|
|
|
+ curWarningCount = pSysWarning->WarningCount;
|
|
|
|
+ ChangeWarningFunc();
|
|
|
|
+ } else if (pSysWarning->WarningCount > 5 && changeWarningPriority == 0) {
|
|
|
|
+ // 當有兩頁 Warning 則每隔三秒改變一次
|
|
|
|
+ if (pSysWarning->PageIndex == 0) {
|
|
|
|
+ pSysWarning->PageIndex = 1;
|
|
|
|
+ } else {
|
|
|
|
+ pSysWarning->PageIndex = 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ChangeWarningFunc();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 頁面資訊處理
|
|
|
|
+ ProcessPageInfo();
|
|
|
|
+
|
|
|
|
+ // 網路 - wifi - 連線訊號處理
|
|
|
|
+ RefreshConnStatus();
|
|
|
|
+
|
|
|
|
+ // 換頁處理
|
|
|
|
+ GetCurrentPage(); //DS60-120 add
|
|
|
|
+ ChangeCurPage();
|
|
|
|
+
|
|
|
|
+ RefreshPageAnimation(_everyPageRollChange);
|
|
|
|
+
|
|
|
|
+#if defined DD360Audi
|
|
|
|
+ ChangeDisplayMoneyInfo();
|
|
|
|
+#else
|
|
|
|
+ if (changeWarningPriority == 0) { ////For Audi
|
|
|
|
+ ChangeDisplayMoneyInfo();
|
|
|
|
+ InformationShow();
|
|
|
|
+ }
|
|
|
|
+#endif //defined DD360Audi
|
|
|
|
+
|
|
|
|
+ changeWarningPriority >= 15 ? (_battery_display_ani = true) : (_battery_display_ani = false);
|
|
|
|
+ changeWarningPriority >= 30 ? changeWarningPriority = 0 : changeWarningPriority++;
|
|
|
|
+ usleep(100000);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#ifndef DD360ComBox
|
|
|
|
+ ShmStatusCodeData->AlarmCode.AlarmEvents.bits.LcmModuleCommFail = true;
|
|
|
|
+#endif
|
|
|
|
+ log_info("Close LCM Uart Port");
|
|
|
|
+ CloseCommunicationLcmPort();
|
|
|
|
+
|
|
|
|
+ return FAIL;
|
|
|
|
+}
|