|
@@ -2081,19 +2081,23 @@ int downloadBMP(uint8_t picIdx, char *filename)
|
|
|
uint32_t pixelSize;
|
|
|
uint32_t transferedByte=0;
|
|
|
uint16_t bufferRamAddr = 0x8000;
|
|
|
+ uint32_t dataLen = 0;
|
|
|
+ uint32_t startAddr=0;
|
|
|
|
|
|
// Reset LCD
|
|
|
uint8_t cmd_reset[] = {0x55, 0xaa, 0x5a, 0xa5};
|
|
|
- if(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0x04, cmd_reset, ARRAY_SIZE(cmd_reset)) == FAIL)
|
|
|
+ while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0x04, cmd_reset, ARRAY_SIZE(cmd_reset)) != PASS)
|
|
|
{
|
|
|
DEBUG_INFO("LCD reset fail.\n");
|
|
|
}
|
|
|
+ sleep(1);
|
|
|
|
|
|
// Get image file size
|
|
|
stat(filename, &fileSt);
|
|
|
bmp = bopen(filename);
|
|
|
uint8_t buf[bmp->width*bmp->height*2];
|
|
|
|
|
|
+ DEBUG_INFO("Target address: %d\n", picIdx);
|
|
|
DEBUG_INFO("Image filename: %s\n", filename);
|
|
|
DEBUG_INFO("Image width: %d height: %d\n", bmp->width, bmp->height);
|
|
|
DEBUG_INFO("Image data size: %d\n", ARRAY_SIZE(buf));
|
|
@@ -2122,38 +2126,39 @@ int downloadBMP(uint8_t picIdx, char *filename)
|
|
|
if((idxSrcData+1) != (((pixelSize%pageSize)==0)?(pixelSize/pageSize):(pixelSize/pageSize)+1))
|
|
|
{
|
|
|
// Data transfer
|
|
|
- while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, bufferRamAddr, &buf[(idxSrcData*pageSize)], pageSize) != PASS)
|
|
|
+ while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, (bufferRamAddr+(dataLen>>1)), &buf[(idxSrcData*pageSize)], pageSize) != PASS)
|
|
|
{
|
|
|
DEBUG_INFO("Transfer data to ram 0x%04X fail.\n", transferedByte);
|
|
|
}
|
|
|
transferedByte += pageSize;
|
|
|
-
|
|
|
- display_cmd[3] = ((pageSize>>1) >> 8) & 0xff; // Data length high byte
|
|
|
- display_cmd[4] = ((pageSize>>1) >> 0) & 0xff; // Data length low byte
|
|
|
- display_cmd[5] = (((idxSrcData*pageSize)>>1) >> 16) & 0xff; // Screen on ram address 1st byte
|
|
|
- display_cmd[6] = (((idxSrcData*pageSize)>>1) >> 8) & 0xff; // Screen on ram address 2nd byte
|
|
|
- display_cmd[7] = (((idxSrcData*pageSize)>>1) >> 0) & 0xff; // Screen on ram address 3th byte
|
|
|
+ dataLen += pageSize;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// Last data transfer
|
|
|
- while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, bufferRamAddr, &buf[(idxSrcData*pageSize)], (pixelSize-(idxSrcData*pageSize))) != PASS)
|
|
|
+ while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, (bufferRamAddr+(dataLen>>1)), &buf[(idxSrcData*pageSize)], (pixelSize-(idxSrcData*pageSize))) != PASS)
|
|
|
{
|
|
|
DEBUG_INFO("Transfer data to ram 0x%04X fail.\n", transferedByte);
|
|
|
}
|
|
|
transferedByte += (pixelSize-(idxSrcData*pageSize));
|
|
|
-
|
|
|
- display_cmd[3] = (((pixelSize-(idxSrcData*pageSize))>>1) >> 8) & 0xff; // Data length high byte
|
|
|
- display_cmd[4] = (((pixelSize-(idxSrcData*pageSize))>>1) >> 0) & 0xff; // Data length low byte
|
|
|
- display_cmd[5] = (((idxSrcData*pageSize)>>1) >> 16) & 0xff; // Screen on ram address 1st byte
|
|
|
- display_cmd[6] = (((idxSrcData*pageSize)>>1) >> 8) & 0xff; // Screen on ram address 2nd byte
|
|
|
- display_cmd[7] = (((idxSrcData*pageSize)>>1) >> 0) & 0xff; // Screen on ram address 3th byte
|
|
|
+ dataLen += (pixelSize-(idxSrcData*pageSize));
|
|
|
}
|
|
|
|
|
|
// Move data from ram to flash
|
|
|
- while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0xa2, display_cmd, ARRAY_SIZE(display_cmd)) != PASS)
|
|
|
+ if((dataLen >= (pageSize*10)) || (idxSrcData == (((pixelSize%pageSize)==0)?(pixelSize/pageSize):(pixelSize/pageSize)+1)-1))
|
|
|
{
|
|
|
- DEBUG_INFO("Write data to display buffer 0x%04X fail.\n", transferedByte);
|
|
|
+ display_cmd[3] = ((dataLen>>1) >> 8) & 0xff; // Data length high byte
|
|
|
+ display_cmd[4] = ((dataLen>>1) >> 0) & 0xff; // Data length low byte
|
|
|
+ display_cmd[5] = (((startAddr)>>1) >> 16) & 0xff; // Screen on ram address 1st byte
|
|
|
+ display_cmd[6] = (((startAddr)>>1) >> 8) & 0xff; // Screen on ram address 2nd byte
|
|
|
+ display_cmd[7] = (((startAddr)>>1) >> 0) & 0xff; // Screen on ram address 3th byte
|
|
|
+
|
|
|
+ while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0xa2, display_cmd, ARRAY_SIZE(display_cmd)) != PASS)
|
|
|
+ {
|
|
|
+ DEBUG_INFO("Write data to display buffer 0x%04X fail.\n", transferedByte);
|
|
|
+ }
|
|
|
+ startAddr += dataLen;
|
|
|
+ dataLen = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2164,6 +2169,7 @@ int downloadBMP(uint8_t picIdx, char *filename)
|
|
|
DEBUG_INFO("Save image fail.\n");
|
|
|
}
|
|
|
DEBUG_INFO("Save image success.\n");
|
|
|
+ sleep(1);
|
|
|
|
|
|
return result;
|
|
|
}
|
|
@@ -2183,15 +2189,17 @@ int downloadBIN(uint8_t targetAddr, char *filename)
|
|
|
|
|
|
// Reset LCD
|
|
|
uint8_t cmd_reset[] = {0x55, 0xaa, 0x5a, 0xa5};
|
|
|
- if(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0x04, cmd_reset, ARRAY_SIZE(cmd_reset)) == FAIL)
|
|
|
+ while(lcdRegisterWrite(Uart1Fd, REG_TYPE_RAM, 0x04, cmd_reset, ARRAY_SIZE(cmd_reset)) != PASS)
|
|
|
{
|
|
|
DEBUG_INFO("LCD reset fail.\n");
|
|
|
}
|
|
|
+ sleep(1);
|
|
|
|
|
|
// Get image file size
|
|
|
stat(filename, &fileSt);
|
|
|
- uint8_t buf[(fileSt.st_size%32768==0?fileSt.st_size/32768:(fileSt.st_size/32768)+1)*32768];
|
|
|
+ uint8_t buf[(fileSt.st_size%32768==0?(fileSt.st_size/32768)*32768:(fileSt.st_size/32768)+1)*32768];
|
|
|
|
|
|
+ DEBUG_INFO("Target address: %d\n", targetAddr);
|
|
|
DEBUG_INFO("Bin filename: %s\n", filename);
|
|
|
DEBUG_INFO("Bin data size: %d\n", fileSt.st_size);
|
|
|
|
|
@@ -2203,19 +2211,18 @@ int downloadBIN(uint8_t targetAddr, char *filename)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ // Read data from bin file
|
|
|
+ memset(buf, 0x00, ARRAY_SIZE(buf));
|
|
|
+ read(fd, buf, ARRAY_SIZE(buf));
|
|
|
+ close(fd);
|
|
|
+
|
|
|
for(uint8_t idxBinSrc=0;idxBinSrc<(fileSt.st_size%32768==0?fileSt.st_size/32768:(fileSt.st_size/32768)+1);idxBinSrc++)
|
|
|
{
|
|
|
- // Read data from bin file
|
|
|
- memset(buf, 0x00, ARRAY_SIZE(buf));
|
|
|
- read(fd, buf, ARRAY_SIZE(buf));
|
|
|
- close(fd);
|
|
|
-
|
|
|
// Transfer data to ram
|
|
|
for(uint16_t idxSrcData=0;idxSrcData<(((blocklSize%pageSize)==0)?(blocklSize/pageSize):(blocklSize/pageSize)+1);idxSrcData++)
|
|
|
{
|
|
|
//DEBUG_INFO("Buffer start data address: 0x%08X\n", (idxBinSrc*blocklSize)+(idxSrcData*pageSize));
|
|
|
//DEBUG_INFO(" Image start ram address: 0x%08X\n", ((idxSrcData*pageSize) >> 1));
|
|
|
-
|
|
|
if((idxSrcData+1) != (((blocklSize%pageSize)==0)?(blocklSize/pageSize):(blocklSize/pageSize)+1))
|
|
|
{
|
|
|
// Data transfer
|
|
@@ -2243,12 +2250,77 @@ int downloadBIN(uint8_t targetAddr, char *filename)
|
|
|
DEBUG_INFO("Save bin file to 0x%04X fail.\n", ((targetAddr*8)+idxBinSrc));
|
|
|
}
|
|
|
DEBUG_INFO("Save bin file on 0x%04X success.\n", ((targetAddr*8)+idxBinSrc));
|
|
|
+ sleep(1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+//=======================================
|
|
|
+// LCD upgrade
|
|
|
+//=======================================
|
|
|
+int lcdUpgrade(char *forlder)
|
|
|
+{
|
|
|
+ int result = PASS;
|
|
|
+ DIR *dir;
|
|
|
+ struct dirent *file;
|
|
|
+ struct stat fileSt;
|
|
|
+
|
|
|
+ if ((dir = opendir (forlder)) != NULL)
|
|
|
+ {
|
|
|
+ /* print all the files and directories within directory */
|
|
|
+ while ((file = readdir (dir)) != NULL)
|
|
|
+ {
|
|
|
+ if((strlen(file->d_name)>2))
|
|
|
+ {
|
|
|
+ int targetAddr;
|
|
|
+ stat(file->d_name, &fileSt);
|
|
|
+
|
|
|
+ if(sscanf(file->d_name, "%d", &targetAddr) == 1)
|
|
|
+ {
|
|
|
+ char targetFile[384];
|
|
|
+
|
|
|
+ sprintf(targetFile, "/mnt/lcd/%s", file->d_name);
|
|
|
+ if(strstr(file->d_name, ".bmp") != NULL)
|
|
|
+ {
|
|
|
+ downloadBMP(targetAddr, targetFile);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ downloadBIN(targetAddr, targetFile);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DEBUG_WARN("%s can not parse target address.\n", file->d_name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(strlen(file->d_name) >= 3)
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("File name error.\n");
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DEBUG_INFO("Searching file.\n");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ sleep(1);
|
|
|
+ }
|
|
|
+ closedir (dir);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ DEBUG_ERROR("%s does not valid.\n", forlder);
|
|
|
+ result = FAIL;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
//=======================================
|
|
|
// Main process
|
|
|
//=======================================
|
|
@@ -2292,78 +2364,86 @@ int main(void)
|
|
|
|
|
|
for(;;)
|
|
|
{
|
|
|
- if(previousMode != ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
|
|
|
- {
|
|
|
- previousMode = ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus;
|
|
|
- }
|
|
|
-
|
|
|
- if(ShmCharger->isAuthrizing || ShmCharger->isGetAuthResult)
|
|
|
+ if(ShmCharger->isUpgradeLcmReq)
|
|
|
{
|
|
|
- if(DiffTimebWithNow(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)
|
|
|
- page_authorizing(ShmCharger->gun_selectd);
|
|
|
- else if((ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus == SYS_MODE_IDLE) && (ShmCharger->gun_info[ShmCharger->gun_selectd].resultAuthorization == VALIDATED_RFID))
|
|
|
- page_preparing(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ ShmCharger->isUpgradeLcmSuccess = ((lcdUpgrade("/mnt/lcd") == PASS) ? YES : NO);
|
|
|
+ ShmCharger->isUpgradeLcmReq = OFF;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ftime(&startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]);
|
|
|
+ if(previousMode != ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
|
|
|
+ {
|
|
|
+ previousMode = ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus;
|
|
|
+ }
|
|
|
|
|
|
- switch(ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
|
|
|
+ if(ShmCharger->isAuthrizing || ShmCharger->isGetAuthResult)
|
|
|
{
|
|
|
- case SYS_MODE_BOOTING:
|
|
|
- page_booting();
|
|
|
- break;
|
|
|
- case SYS_MODE_IDLE:
|
|
|
- page_idle(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_AUTHORIZING:
|
|
|
- //page_authorizing(ShmCharger->gun_selectd);
|
|
|
- break;
|
|
|
- case SYS_MODE_PREPARING:
|
|
|
+ if(DiffTimebWithNow(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)
|
|
|
+ page_authorizing(ShmCharger->gun_selectd);
|
|
|
+ else if((ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus == SYS_MODE_IDLE) && (ShmCharger->gun_info[ShmCharger->gun_selectd].resultAuthorization == VALIDATED_RFID))
|
|
|
page_preparing(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_CHARGING:
|
|
|
- page_charging(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_TERMINATING:
|
|
|
- page_terminating(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_COMPLETE:
|
|
|
- page_complete(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_ALARM:
|
|
|
- page_alarm();
|
|
|
- break;
|
|
|
- case SYS_MODE_FAULT:
|
|
|
- page_fault();
|
|
|
- break;
|
|
|
- case SYS_MODE_MAINTAIN:
|
|
|
- page_maintain();
|
|
|
- break;
|
|
|
- case SYS_MODE_UPDATE:
|
|
|
- page_update();
|
|
|
- break;
|
|
|
- case SYS_MODE_RESERVATION:
|
|
|
- //page_reservation();
|
|
|
- page_idle(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- break;
|
|
|
- case SYS_MODE_BOOKING:
|
|
|
- page_booking();
|
|
|
- break;
|
|
|
- case SYS_MODE_DEBUG:
|
|
|
- page_debug();
|
|
|
- break;
|
|
|
- default:
|
|
|
- page_unknown();
|
|
|
- break;
|
|
|
}
|
|
|
- }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ftime(&startTime[ShmCharger->gun_selectd][TMR_IDX_SHOW_AUTH_RESULT]);
|
|
|
|
|
|
- page_header(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
- page_footer();
|
|
|
+ switch(ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus)
|
|
|
+ {
|
|
|
+ case SYS_MODE_BOOTING:
|
|
|
+ page_booting();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_IDLE:
|
|
|
+ page_idle(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_AUTHORIZING:
|
|
|
+ //page_authorizing(ShmCharger->gun_selectd);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_PREPARING:
|
|
|
+ page_preparing(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_CHARGING:
|
|
|
+ page_charging(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_TERMINATING:
|
|
|
+ page_terminating(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_COMPLETE:
|
|
|
+ page_complete(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_ALARM:
|
|
|
+ page_alarm();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_FAULT:
|
|
|
+ page_fault();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_MAINTAIN:
|
|
|
+ page_maintain();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_UPDATE:
|
|
|
+ page_update();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_RESERVATION:
|
|
|
+ //page_reservation();
|
|
|
+ page_idle(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ break;
|
|
|
+ case SYS_MODE_BOOKING:
|
|
|
+ page_booking();
|
|
|
+ break;
|
|
|
+ case SYS_MODE_DEBUG:
|
|
|
+ page_debug();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ page_unknown();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ page_header(ShmCharger->gun_selectd, ShmSysConfigAndInfo->SysInfo.AcChargingData[ShmCharger->gun_selectd].SystemStatus);
|
|
|
+ page_footer();
|
|
|
+ }
|
|
|
|
|
|
usleep(100000);
|
|
|
}
|