diff --git a/code/application/source/cardv/SrcCode/System/main.c b/code/application/source/cardv/SrcCode/System/main.c index 322c976a9..60e735c39 100755 --- a/code/application/source/cardv/SrcCode/System/main.c +++ b/code/application/source/cardv/SrcCode/System/main.c @@ -326,10 +326,12 @@ UINT8 sf_cardv_check_power_on_mode(void) char *pStrSrc = NULL; char *pStrOtsOk = "Mode="; char *pStrUpFw = "UpFw="; + char *pStrUpMcu = "mcu="; char *temp = NULL; UINT8 startup = 0; UINT8 UpFw = 0; + UINT8 Upmcu = 0; system("cat /proc/cmdline > /tmp/Mode.txt"); fp = fopen("/tmp/Mode.txt","r"); @@ -358,8 +360,13 @@ UINT8 sf_cardv_check_power_on_mode(void) //printf("%s: UpFw=%d\r\n", __func__,UpFw); sf_set_fw_update(UpFw); } - printf("%s: PowerOnModeStr=%d UpFw=%d\r\n", __func__,startup,UpFw); - + temp = strstr(pStrSrc, pStrUpMcu); + if ( temp != NULL) { + temp += strlen("mcu="); + sscanf(temp, "%hhd", &Upmcu); + sf_set_mcu_update_flag(Upmcu); + } + SLOGI("StartMode=%d,UpFw=%d Upmcu=%d\r\n", startup, UpFw, Upmcu); free(pStrSrc); } diff --git a/code/application/source/sf_app/Makefile b/code/application/source/sf_app/Makefile index 5016a46da..d64ac0c5a 100755 --- a/code/application/source/sf_app/Makefile +++ b/code/application/source/sf_app/Makefile @@ -317,6 +317,7 @@ SRC = \ ./code/source/systemMng/sf_commu_mcu_reg.c \ ./code/source/systemMng/sf_commu_mcu.c \ ./code/source/systemMng/sys_usrmem.c \ + ./code/source/systemMng/sf_mcu_upgrade.c \ ./code/source/devMng/sf_dev_other.c \ ./code/source/devMng/sf_dev_usb.c \ ./code/source/devMng/sf_keymng.c \ @@ -337,7 +338,7 @@ SRC = \ ./code/source/sf_blue/src/sf_blue_hal.c \ ./code/source/sf_blue/src/util.c \ ./code/source/sf_blue/src/watch.c \ - + # ./code/source/wifi/sf_data_transfer.c \ # ./code/source/wifi/sf_svr_send.c \ # ./code/source/wifi/sf_wifi_svr.c diff --git a/code/application/source/sf_app/code/include/sf_common.h b/code/application/source/sf_app/code/include/sf_common.h index 208fc1da4..388bdaa6a 100755 --- a/code/application/source/sf_app/code/include/sf_common.h +++ b/code/application/source/sf_app/code/include/sf_common.h @@ -81,7 +81,8 @@ void sf_set_module_update(UINT8 flag); UINT8 sf_get_fw_update(void); void sf_set_fw_update(UINT8 flag); UINT8 sf_app_get_night_led_flag(void); - +void sf_set_mcu_update_flag(UINT8 flag); +UINT8 sf_get_mcu_update_flag(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/include/sf_mcu_upgrade.h b/code/application/source/sf_app/code/include/sf_mcu_upgrade.h new file mode 100755 index 000000000..f0a86d7f5 --- /dev/null +++ b/code/application/source/sf_app/code/include/sf_mcu_upgrade.h @@ -0,0 +1,67 @@ +#ifndef __FIRMWARE_UPGRADE_H + +#define __FIRMWARE_UPGRADE_H +/************************************************************************** + * + * Copyright (c) 2015-2020 by WuYuan Technology, Inc. + * + * This software is copyrighted by and is the property of SiFar + * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. + * This software may only be used in accordance with the corresponding + * license agreement. Any unauthorized use, duplication, distribution, + * or disclosure of this software is expressly forbidden. + * + * This Copyright notice MUST not be removed or modified without prior + * written consent of SiFar Technology, Inc.. + * + * WuYuan Technology, Inc. reserves the right to modify this software without notice. + * + * Author: ljy + * Ver: 1.0.0 2022.06.15 + * Description: creat +**************************************************************************/ +#include "sf_type.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +typedef struct{ + UINT8* fw_content; + UINT32 fw_total_size; + UINT32 fw_remain_size; + UINT32 fw_complete_size; + UINT16 fw_crc; +}FW_PKT_t; + +typedef enum{ + FWUPGRADE_INIT_STATE, + FWUPGRADE_ENTER_UPGRADE_STATE, + FWUPGRADE_WAIT_TO_RESTART_STATE, + FWUPGRADE_COMFIRM_UPGRADE_STATE, + FWUPGRADE_TRANSFER_PACKET_STATE, + FWUPGRADE_TRANSFER_FINISH_STATE, + FWUPGRADE_ERROR_OCCUR_STATE, +}FW_UPGRADE_STATE_e; + +extern unsigned char mcu_upgrade_buf[32]; +extern unsigned char mcu_upgrade_buf_len; + +void Fw_UpgradeThreadStart(void); +void Fw_UpgradeThreadStop(void); +SINT8 Fw_UpgradeBinExist(char * file); +SINT8 Fw_GetFirmwareSize(char * file, UINT32 * file_size); +SINT8 Fw_GetFirmwareContent(char * file, UINT8 * file_content, UINT32 file_size); +SINT8 Fw_Read(UINT8* cmd, void * data, UINT32* size); +SINT8 Fw_Send(UINT8 cmd, void* data, UINT32 size); + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + +#endif + diff --git a/code/application/source/sf_app/code/include/sf_param_enum.h b/code/application/source/sf_app/code/include/sf_param_enum.h index 0caf16245..57e833e3f 100755 --- a/code/application/source/sf_app/code/include/sf_param_enum.h +++ b/code/application/source/sf_app/code/include/sf_param_enum.h @@ -466,6 +466,8 @@ typedef enum sf_MCU_MESSAGE_TYPE_E SF_MCU_CMD_MCU_VER = 0x1E00, SF_MCU_CMD_MCU_RTC = 0x1F00, SF_MCU_CMD_SET_MCU = 0x1F01, + SF_MCU_CMD_UPDATA = 0x1F02, + }SF_MCU_MESSAGE_TYPE_E; typedef enum sf_PARA_MESSAGE_TYPE_E diff --git a/code/application/source/sf_app/code/include/sf_system.h b/code/application/source/sf_app/code/include/sf_system.h index 6e296a82a..0bf923f90 100755 --- a/code/application/source/sf_app/code/include/sf_system.h +++ b/code/application/source/sf_app/code/include/sf_system.h @@ -65,6 +65,7 @@ SINT32 app_auto_poweroff_start(void); UINT8 sf_check_power_on_mode(void); void sf_power_off_msg_to_cardv(void); SINT32 sf_app_mcu_para_power_no_start(void); +SINT32 sf_app_mcu_updata_start(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/app/sf_app.c b/code/application/source/sf_app/code/source/app/sf_app.c index 3e029dd7b..717e40270 100755 --- a/code/application/source/sf_app/code/source/app/sf_app.c +++ b/code/application/source/sf_app/code/source/app/sf_app.c @@ -112,6 +112,8 @@ int main(int argc, char *argv[]) SINT32 isUsb = 0; SINT32 isCard = 0; SINT32 isUpdate = 0; + UINT8 isMcuUpdate = 0; + //SF_MESSAGE_BUF_S stMessageBuf = {0}; //BOOL autosend = FALSE; SF_MUTEX_INIT_LOCK(Param_mutexLock); @@ -130,7 +132,8 @@ int main(int argc, char *argv[]) //sf_set_fw_update(isUpdate); isUpdate = sf_get_fw_update(); - SLOGI("isUsb = %d isCard = %d isUpdate:%d\n", isUsb,isCard,isUpdate); + isMcuUpdate = sf_get_mcu_update_flag(); + SLOGI("isUsb = %d isCard = %d isUpdate:%d isMcuUpdate:%d\n", isUsb,isCard,isUpdate ,isMcuUpdate); if(!isUsb) { @@ -166,7 +169,7 @@ int main(int argc, char *argv[]) sf_set_bt_en(1); } } - if((0 == isUpdate) && (puiPara->GprsSwitch)) + if((0 == isMcuUpdate) && (0 == isUpdate) && (puiPara->GprsSwitch)) { sf_4G_usb_init(); app_RegisterNet_start(); diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c index 3cef16042..3ab5bbd5c 100755 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -64,6 +64,7 @@ SINT8 bmoduleupdate = 0; static UINT8 ModuleUpdating = 0; static UINT8 FwUpdate = 0; static UINT8 IsNightLedOn = 0; +static UINT8 McuUpdateFlag = 0; static SF_THREAD_CFG_S sf_msgQueueThread = { @@ -71,6 +72,15 @@ static SF_THREAD_CFG_S sf_msgQueueThread = .TskId = -1, }; +UINT8 sf_get_mcu_update_flag(void) +{ + return McuUpdateFlag; +} + +void sf_set_mcu_update_flag(UINT8 flag) +{ + McuUpdateFlag = flag; +} UINT8 sf_get_module_update(void) { @@ -626,7 +636,13 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) sf_statistics_param_load(sf_statistics_param_get()); MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1); - sf_set_key_fw_update(sf_get_fw_update()); + + sf_set_key_fw_update(sf_get_fw_update());//up fw + + if(sf_get_mcu_update_flag())//up mcu + { + sf_app_mcu_updata_start(); + } break; case FST_STA_DISK_UNFORMAT: //sf_set_card(1); @@ -784,6 +800,9 @@ static SINT32 sf_app_proccess_cmd_mcu(SF_MESSAGE_BUF_S *pMessageBuf) case SF_MCU_CMD_SET_MCU: sf_mcu_reg_set(pMessageBuf->arg2, pMessageBuf->arg3); break; + case SF_MCU_CMD_UPDATA: + + break; default: break; } diff --git a/code/application/source/sf_app/code/source/app/sf_system.c b/code/application/source/sf_app/code/source/app/sf_system.c index 01e179215..db2305107 100755 --- a/code/application/source/sf_app/code/source/app/sf_system.c +++ b/code/application/source/sf_app/code/source/app/sf_system.c @@ -43,6 +43,7 @@ #include "sf_file.h" #include "sf_hal_ttyusb.h" #include "sf_commu_mcu.h" +#include "sf_mcu_upgrade.h" #ifdef __cplusplus #if __cplusplus extern "C" { @@ -135,6 +136,12 @@ SF_THREAD_S McuPowerOnTskCfg = .TskId = -1, }; +SF_THREAD_S McuUpDataTskCfg = +{ + .IsRun = 0, + .TskId = -1, +}; + SINT8 debugFlag = 0; UINT8 McuInitFlag = 0; @@ -1388,10 +1395,12 @@ UINT8 sf_check_power_on_mode(void) char *pStrSrc = NULL; char *pStrOtsOk = "Mode="; char *pStrUpFw = "UpFw="; + char *pStrUpMcu = "mcu="; char *temp = NULL; UINT8 startup = 0; UINT8 UpFw = 0; + UINT8 Upmcu = 0; system("cat /proc/cmdline > /tmp/Mode.txt"); fp = fopen("/tmp/Mode.txt","r"); @@ -1419,7 +1428,13 @@ UINT8 sf_check_power_on_mode(void) //printf("%s: UpFw=%d\r\n", __func__,UpFw); sf_set_fw_update(UpFw); } - SLOGI("StartMode=%d,UpFw=%d\r\n",startup,UpFw); + temp = strstr(pStrSrc, pStrUpMcu); + if ( temp != NULL) { + temp += strlen("mcu="); + sscanf(temp, "%hhd", &Upmcu); + sf_set_mcu_update_flag(Upmcu); + } + SLOGI("StartMode=%d,UpFw=%d Upmcu=%d\r\n", startup, UpFw, Upmcu); free(pStrSrc); } @@ -1563,4 +1578,51 @@ SINT32 sf_app_mcu_para_power_no_start(void) } return SF_SUCCESS; +} + +void* sf_app_mcu_updata_thread(void *arg) +{ + + SLOGI("thread run\n"); + McuUpDataTskCfg.IsRun = 1; + MLOGI("MCU_UPGRADE\n"); + UINT32 McuFsize = 0; + SINT8 ret = 0; + ret = Fw_GetFirmwareSize((char*)"/mnt/sd/Mupgrade.bin", &McuFsize); + if((sf_in_card_exist() == SF_TRUE) && (access("/mnt/sd/Mupgrade.bin", F_OK) == 0) + && (ret == 0) && (McuFsize > 1024) && (sf_is_enough_power_to_update() == SF_TRUE)) + { + sf_set_mcu_update_flag(SF_TRUE); + Fw_UpgradeThreadStart(); + } + else + { + // sf_set_mcu_update_flag(SF_TRUE); + // sleep(5); + // sf_led_set(SF_LED_ALL, SF_LED_STATE_OFF); + + MLOGI(" sf_power_off_msg_to_cardv\n"); + sf_power_off_msg_to_cardv(); + } + McuUpDataTskCfg.IsRun = 0; + SLOGI("thread end\n"); + + return NULL; +} +SINT32 sf_app_mcu_updata_start(void) +{ + SINT32 ret = SF_FAILURE; + if(McuUpDataTskCfg.IsRun) + { + SLOGE("thread has already run !!!\n"); + return SF_FAILURE; + } + ret = pthread_create(&McuUpDataTskCfg.TskId, NULL, sf_app_mcu_updata_thread, NULL); + if(ret != SF_SUCCESS) + { + MLOGD("thread creat fail!\n"); + return ret; + } + return SF_SUCCESS; + } \ No newline at end of file diff --git a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c index a6bcc0ce8..4f1ae83c0 100755 --- a/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c +++ b/code/application/source/sf_app/code/source/systemMng/sf_commu_mcu_reg.c @@ -656,7 +656,15 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val) mcuData[i++] = 0; mcuReg[i] = SYS_STATUS; - mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0; + if((sf_get_module_update() == SF_TRUE) + || (sf_get_mcu_update_flag() == SF_TRUE)) + { + mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0 | 0x20; + } + else + { + mcuData[i++] = isUsb << 2 | isCardFull << 1 | isCard << 0; + } mcuReg[i] = POWEROFF_TYPE; temp = 0; @@ -1208,7 +1216,7 @@ UINT8 sf_get_module_sleep_flag(void) int sf_app_while_flag(void) { if((!sf_usb_IsInsert()) && (sf_get_power_off_flag() != 1) - && (sf_get_module_update() != 1) && (sf_get_fw_update() == 0)) + && (sf_get_module_update() != 1) && (sf_get_fw_update() == 0) && (sf_get_mcu_update_flag() == 0)) { return 1; } diff --git a/code/application/source/sf_app/code/source/systemMng/sf_mcu_upgrade.c b/code/application/source/sf_app/code/source/systemMng/sf_mcu_upgrade.c new file mode 100755 index 000000000..c1f31d8ef --- /dev/null +++ b/code/application/source/sf_app/code/source/systemMng/sf_mcu_upgrade.c @@ -0,0 +1,534 @@ +/************************************************************************** + * + * Copyright (c) 2015-2020 by WuYuan Technology, Inc. + * + * This software is copyrighted by and is the property of SiFar + * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. + * This software may only be used in accordance with the corresponding + * license agreement. Any unauthorized use, duplication, distribution, + * or disclosure of this software is expressly forbidden. + * + * This Copyright notice MUST not be removed or modified without prior + * written consent of SiFar Technology, Inc.. + * + * WuYuan Technology, Inc. reserves the right to modify this software without notice. + * + * Author: ljy + * Ver: 1.0.0 2022.06.15 + * Description: creat +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sf_common.h" +#include "sf_mcu_upgrade.h" +#include "sf_param_common.h" +#include "sf_ledmng.h" +#include "sf_message_queue.h" +#include "sf_keymng.h" +#include "sf_param_enum.h" +#include "sf_type.h" +#include "sf_system.h" +#include "sf_fileMng.h" +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif +#endif + +extern int gsfd; + +#define UPGRADE_FIRMWARE_NANE (char*)"/mnt/sd/Mupgrade.bin" +#define UART_PATH "dev/ttyS2" + +//unsigned char mcu_upgrade_buf[32] = {0}; +//unsigned char mcu_upgrade_buf_len = 0; + +static FW_PKT_t fw_packet; +static SINT8 FwUpgradeExit = 1; +static FW_UPGRADE_STATE_e FwUpgradeState = FWUPGRADE_INIT_STATE; +static pthread_t FwUpgradeThread = 0; + +extern int pthread_setname_np(pthread_t thread, const char *name); + +static SINT8 depack(UINT8* src, UINT32 srcl, UINT8* cmd, UINT8* dst, UINT32* dstl); +static UINT32 pack(UINT8 cmd, UINT8 * src, UINT32 size, UINT8* dst); +static void * FwUpgradeTask(void * argv); + + +static const unsigned short Crc16Table[256] = +{ + 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, + 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, + 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, + 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, + 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40, + 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41, + 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641, + 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040, + 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240, + 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, + 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, + 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, + 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, + 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40, + 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640, + 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041, + 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240, + 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441, + 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, + 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, + 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, + 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, + 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640, + 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041, + 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241, + 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440, + 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40, + 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, + 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, + 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, + 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, + 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040 +}; + +static unsigned short sf_crc16_check(unsigned char * dataIn, int length) +{ + unsigned short result = 0; + unsigned short tableNo = 0; + + for (int i = 0; i < length; i++) + { + tableNo = ((result & 0xff) ^ (dataIn[i] &0xff)); + result = ((result >> 8) & 0xff) ^Crc16Table[tableNo]; + } + + return result; +} + +void Fw_UpgradeThreadStart(void) +{ + + int ret = -1; + FwUpgradeExit = 0; + ret = pthread_create(&FwUpgradeThread, NULL, FwUpgradeTask, NULL); + if(ret == 0) + { + pthread_setname_np(FwUpgradeThread, "fw_upgrade_task"); + printf("%s pthread start\r\n", __FUNCTION__); + } + else + { + FwUpgradeExit = 1; + printf("%s pthread create failed\r\n", __FUNCTION__); + } +} + +void Fw_UpgradeThreadStop(void) +{ + FwUpgradeExit = 1; + pthread_join(FwUpgradeThread, NULL); +} + +SINT8 Fw_UpgradeBinExist(char * file) +{ + + if(sf_file_IsExsit((CHAR *)file) != SF_TRUE) + { + printf("%s, fw file bin not exist\r\n", __FUNCTION__); + return -1; + } + else + { + printf("%s, fw file bin exist\r\n", __FUNCTION__); + return 0; + } + +} + +SINT8 Fw_GetFirmwareSize(char * file, UINT32 * file_size) +{ + struct stat statBuf; + SINT32 fileFd = 0; + fileFd = open((char *)file, O_RDONLY); + SINT8 ret = -1; + if(fileFd) + { + fstat(fileFd, &statBuf); + *file_size = statBuf.st_size; + ret = 0; + printf("%s, fw file bin size %d\r\n", __FUNCTION__, *file_size); + } + else + { + printf("%s, fw open file bin failed\r\n", __FUNCTION__); + ret = -1; + } + close(fileFd); + return ret; + +} + +SINT8 Fw_GetFirmwareContent(char * file, UINT8 * file_content, UINT32 file_size) +{ + SINT32 fileFd = 0; + SINT8 ret = -1; + UINT32 len = 0; + fileFd = open((char *)file, O_RDONLY); + + if(fileFd) + { + while(len < file_size) + { + ret = read(fileFd, file_content + len, 32); + if(ret < 0) + { + ret = -1; + printf("fw read file bin failed\r\n"); + break; + } + else + { + len += ret; + ret = 0; + } + } + } + else + { + printf("fw open file bin failed\r\n"); + ret = -1; + } + close(fileFd); + return ret; +} + + +SINT8 Fw_Read(UINT8* cmd, void * data, UINT32* size) +{ + SINT8 ret = -1; + //SINT8 fd = -1; + //UINT8 recvBuf[32] = {0}; + //UINT32 len = 32; + UINT8 trytimes = 0; + //fd = open(UART_PATH, O_RDWR); + if (gsfd < 0) + { + printf("Open %s error!\n", UART_PATH); + ret = -1; + return ret; + } + + //len = read(fd, recvBuf, len); + while(mcu_upgrade_buf_len == 0 && trytimes < 100) + { + trytimes++; + usleep(10000); + } + + //ret = depack(recvBuf, len, cmd, data, size); + ret = depack(mcu_upgrade_buf, mcu_upgrade_buf_len, cmd, (UINT8*)data, size); + mcu_upgrade_buf_len = 0; + //close(fd); + + return ret; +} + +static SINT8 depack(UINT8* src, UINT32 srcl, UINT8* cmd, UINT8* dst, UINT32* dstl) +{ + UINT16 crc1 = 0; + UINT16 crc2 = 0; + SINT8 ret = -1; + crc1 = ((src[srcl - 4] << 8) & 0xff00) | src[srcl - 3]; + crc2 = sf_crc16_check(&src[2], srcl - 6); + if(crc1 != crc2) + { + ret = -1; + return ret; + } + + *cmd = src[2]; + + if(dst != NULL) + { + memcpy(dst, &src[2], srcl - 6); + } + + if(dstl != NULL) + { + *dstl = srcl - 6; + } + ret = 0; + return ret; +} + + SINT8 Fw_Send(UINT8 cmd, void* data, UINT32 size) + { + SINT8 ret = -1; + //SINT8 fd = -1; + UINT8 sndBuf[300] = {0}; + UINT32 len = 0; + //fd = open(UART_PATH, O_RDWR); + if (gsfd < 0) + { + printf("Open %s error!\n",UART_PATH); + ret = -1; + return ret; + } + + len = pack(cmd, (UINT8*)data, size, sndBuf); + ret = write(gsfd, sndBuf, len); + + //close(fd); + return ret; + } + + +static UINT32 pack(UINT8 cmd, UINT8 * src, UINT32 size, UINT8* dst) +{ + UINT32 crc_start = 0; + UINT32 crc_end = 0; + UINT16 crc = 0; + UINT32 idx = 0; + + dst[idx] = 0x55; + idx++; + dst[idx] = 0xAA; + idx++; + crc_start = idx; + dst[idx] = cmd; + idx++; + if(size > 0) + { + memcpy(&dst[idx], src, size); + idx += size; + } + + crc_end = idx; + crc = sf_crc16_check(&dst[crc_start], crc_end - crc_start); + dst[idx] = (crc & 0xff00) >> 8; + idx++; + dst[idx] = crc & 0x00ff; + idx++; + + dst[idx] = 0xff; + idx++; + dst[idx] = 0xee; + idx++; + return idx; + +} + + +static void * FwUpgradeTask(void * argv) +{ + SINT8 ret = -1; + UINT8 recvBuf[32] = {0}; + UINT32 recvl = 0; + UINT8 cmd = 0x00; + UINT8 data[300] = {0}; + UINT16 len = 0; + UINT16 pkt_id = 0; + UINT16 ack_id = 0; + SINT8 param[1] = {0}; + param[0] = 0; + + while(FwUpgradeExit == 0) + { + switch (FwUpgradeState) + { + case FWUPGRADE_INIT_STATE: + //sf_sys_status_led_set(SF_LED_SYS_STATE_UPGRADE_START); + printf("FWUPGRADE_INIT_STATE\r\n"); + fw_packet.fw_content = NULL; + fw_packet.fw_total_size = 0; + fw_packet.fw_remain_size = 0; + fw_packet.fw_complete_size = 0; + ret = Fw_GetFirmwareSize(UPGRADE_FIRMWARE_NANE, &fw_packet.fw_total_size); + + if(ret < 0) + { + printf("Fw_GetFirmwareSize failed\r\n"); + FwUpgradeState = FWUPGRADE_ERROR_OCCUR_STATE; + break; + } + + fw_packet.fw_remain_size = fw_packet.fw_total_size; + fw_packet.fw_content = (UINT8*)malloc(fw_packet.fw_total_size); + if(fw_packet.fw_content == NULL) + { + printf("malloc file content buffer failed\r\n"); + FwUpgradeState = FWUPGRADE_ERROR_OCCUR_STATE; + break; + } + ret = Fw_GetFirmwareContent(UPGRADE_FIRMWARE_NANE, fw_packet.fw_content, fw_packet.fw_total_size); + fw_packet.fw_crc = sf_crc16_check(fw_packet.fw_content, fw_packet.fw_total_size); + + if(sf_poweron_type_get() != 0x0f) /*at upgrade start mode already*/ + { + FwUpgradeState = FWUPGRADE_ENTER_UPGRADE_STATE; + } + else + { + FwUpgradeState = FWUPGRADE_COMFIRM_UPGRADE_STATE; + } + + break; + + case FWUPGRADE_ENTER_UPGRADE_STATE: + printf("FWUPGRADE_ENTER_UPGRADE_STATE\r\n"); + data[0] = 1; + ret = Fw_Send(0xec, data, 1); + + ret = Fw_Read(&cmd, recvBuf, &recvl); + if(recvBuf[1] == 1) + { + for(unsigned int i = 0; i < recvl; i++) + { + printf("recvBuf[%d]=0x%x\r\n", i, recvBuf[i]); + } + FwUpgradeState = FWUPGRADE_WAIT_TO_RESTART_STATE; + } + else + { + FwUpgradeState = FWUPGRADE_ERROR_OCCUR_STATE; + } + break; + + case FWUPGRADE_WAIT_TO_RESTART_STATE: + printf("FWUPGRADE_WAIT_TO_RESTART_STATE\r\n"); + /*if mcu does not power down the main control within 3 seconds, + all indicator lights will flash red for 5 seconds, + and the MCU will power down and restart itself.*/ + sleep(3); + //sf_sys_status_led_set(SF_LED_SYS_STATE_UPGRADE_FAIL); + //sleep(5); + printf("SF_KEY_PIN_AOTU_MODE_POWOFF\r\n"); + sf_power_off_msg_to_cardv(); + break; + + case FWUPGRADE_COMFIRM_UPGRADE_STATE: + printf("FWUPGRADE_COMFIRM_UPGRADE_STATE\r\n"); + data[0] = 0; + data[1] = (fw_packet.fw_total_size & 0xff000000) >> 24; + data[2] = (fw_packet.fw_total_size & 0x00ff0000) >> 16; + data[3] = (fw_packet.fw_total_size & 0x0000ff00) >> 8; + data[4] = (fw_packet.fw_total_size & 0x000000ff); + data[5] = (fw_packet.fw_crc & 0xff00) >> 8; + data[6] = (fw_packet.fw_crc & 0x00ff); + + ret = Fw_Send(0xef, data, 7); + + ret = Fw_Read(&cmd, recvBuf, &recvl); + for(unsigned int i = 0; i < recvl; i++) + printf("recv 0x%x\r\n", recvBuf[i]); + if(cmd == 0xef && recvBuf[1] == 0) + { + FwUpgradeState = FWUPGRADE_TRANSFER_PACKET_STATE;/*mcu allow to upgrade*/ + } + else + { + FwUpgradeState = FWUPGRADE_ERROR_OCCUR_STATE; + } + break; + + case FWUPGRADE_TRANSFER_PACKET_STATE: + printf("FWUPGRADE_TRANSFER_PACKET_STATE\r\n"); + if(fw_packet.fw_remain_size >= 256) + { + len = 256; + } + else + { + len = fw_packet.fw_remain_size; + } + + data[0] = (pkt_id & 0xff00) >> 8; + data[1] = pkt_id & 0x00ff; + data[2] = (len & 0xff00) >> 8; + data[3] = len & 0x00ff; + memcpy(&data[4], fw_packet.fw_content + fw_packet.fw_complete_size, len); + + ret = Fw_Send(0xee, &data, len + 4); + ret = Fw_Read(&cmd, recvBuf, &recvl); + + ack_id = ((UINT16)recvBuf[1]) << 8 | recvBuf[2]; + printf("cmd %x, ack_id %d, pkt_id %d, recv3 %x\r\n", + cmd, ack_id, pkt_id, recvBuf[3]); + if(cmd == 0xee && ack_id == pkt_id && recvBuf[3] == 0) + { + fw_packet.fw_remain_size -= len; + fw_packet.fw_complete_size += len; + pkt_id++; + if(fw_packet.fw_total_size == fw_packet.fw_complete_size) + { + ret = Fw_Read(&cmd, recvBuf, &recvl); + if(recvBuf[1] == 0) + { + FwUpgradeState = FWUPGRADE_TRANSFER_FINISH_STATE; + } + else + { + FwUpgradeState = FWUPGRADE_TRANSFER_PACKET_STATE; + } + + } + else + { + FwUpgradeState = FWUPGRADE_TRANSFER_PACKET_STATE; + } + } + else + { + FwUpgradeState = FWUPGRADE_ERROR_OCCUR_STATE; + } + break; + + case FWUPGRADE_TRANSFER_FINISH_STATE: + printf("FWUPGRADE_TRANSFER_FINISH_STATE\r\n"); + //sf_sys_status_led_set(SF_LED_SYS_STATE_UPGRADE_SUCCESS); + free(fw_packet.fw_content); + /*exit upgrade thread*/ + FwUpgradeExit = 1; + break; + + case FWUPGRADE_ERROR_OCCUR_STATE: + printf("FWUPGRADE_ERROR_OCCUR_STATE\r\n"); + if(fw_packet.fw_content != NULL) + { + free(fw_packet.fw_content); + } + data[0] = 0; + ret = Fw_Send(0xec, data, 1); /*notify mcu to exit upgrade mode*/ + Fw_Read(&cmd, recvBuf, &recvl); + + sf_power_off_msg_to_cardv(); + + /*exit upgrade thread*/ + FwUpgradeExit = 1; + break; + + default: + break; + } + + usleep(200000); + } + printf("ret is %d\r\n", ret); + pthread_exit(NULL); + +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif +#endif + diff --git a/code/lib/source/sifar/code/include/sf_common.h b/code/lib/source/sifar/code/include/sf_common.h index f4cfff4f8..bc28276e7 100755 --- a/code/lib/source/sifar/code/include/sf_common.h +++ b/code/lib/source/sifar/code/include/sf_common.h @@ -40,6 +40,8 @@ void sf_set_pir_statu_flag(BOOL flag); void sf_set_auto_off_time(UINT16 time); void sf_set_keep_alive_time(unsigned int time_s); UINT16 sf_get_auto_off_time(void); +void sf_set_mcu_update_flag(UINT8 flag); +UINT8 sf_get_mcu_update_flag(void); UINT8 sf_get_fw_update(void); void sf_set_fw_update(UINT8 flag); UINT8 sf_get_module_update(void); diff --git a/code/lib/source/sifar/code/source/common/sf_common.c b/code/lib/source/sifar/code/source/common/sf_common.c index cda78ff7c..387fe0a90 100755 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -97,6 +97,7 @@ static int shared_condition = 1; static SINT32 WifiSocket = 0; static UINT8 UiparaFlag = 0; static SF_BLE_STATUS_E BleStatus = SF_BLE_OK; +static UINT8 McuUpdateFlag = 0; static SF_THREAD_S UpgradeTskParam = { @@ -310,7 +311,7 @@ void sf_mode_detect(void) //countDownOffFlg = 0; } - if(puiPara->AutoOffSwitch == 0 || SF_BLE_CON == sf_get_ble_status() || (0x04 == NetWorkFlag/*SF_4G_SENDING*/) || (0x05 == NetWorkFlag/*SF_4G_SEARCHING*/) || (sf_get_fw_update()) || (sf_get_module_update())/*|| (appActiveStateGet() == APP_STATE_CUSTOMER_TRANSFER)*/) + if(puiPara->AutoOffSwitch == 0 || SF_BLE_CON == sf_get_ble_status() || (0x04 == NetWorkFlag/*SF_4G_SENDING*/) || (0x05 == NetWorkFlag/*SF_4G_SEARCHING*/) || (sf_get_fw_update()) || (sf_get_module_update()) || (sf_get_mcu_update_flag())/*|| (appActiveStateGet() == APP_STATE_CUSTOMER_TRANSFER)*/) { AutoOfftime=0; } @@ -347,6 +348,17 @@ void sf_mode_detect(void) } //printf("[%s:%d] e\n", __FUNCTION__, __LINE__); } + +UINT8 sf_get_mcu_update_flag(void) +{ + return McuUpdateFlag; +} + +void sf_set_mcu_update_flag(UINT8 flag) +{ + McuUpdateFlag = flag; +} + UINT8 sf_get_module_update(void) { return ModuleUpdating; @@ -1775,7 +1787,7 @@ static SINT32 sf_cardv_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf) switch(pMessageBuf->arg1) { case SF_WIFI_CMD_START: - if((0 == sf_get_fw_update()) && (sf_get_mode_flag())) + if((0 == sf_get_mcu_update_flag()) && (0 == sf_get_fw_update()) && (sf_get_mode_flag())) sf_cardv_wifi_start(); break; @@ -2675,7 +2687,7 @@ UINT32 sf_cardv_wifi_start(void) SINT32 ret = 1; UIMenuStoreInfo *puiPara = sf_ui_para_get(); - if((0 == sf_get_fw_update()) && (sf_get_mode_flag()) && (puiPara->WifiSwitch)) + if((0 == sf_get_mcu_update_flag()) && (0 == sf_get_fw_update()) && (sf_get_mode_flag()) && (puiPara->WifiSwitch)) { if(WifiTskCfg.IsRun) { diff --git a/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c b/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c index 537fd7482..d53618fb1 100644 --- a/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c +++ b/code/lib/source/sifar/code/source/mcu/sf_mcu_client.c @@ -2017,7 +2017,7 @@ void sf_calculate_daily_report(UINT8*dailyHour, UINT8*dailyMin) int sf_while_flag(void) { if((!sf_is_usb_flag()) && (POWEROFF != 1) - && (ModuleUpdating != 1) && (sf_get_fw_update() == 0)) + && (ModuleUpdating != 1) && (0 == sf_get_mcu_update_flag()) && (sf_get_fw_update() == 0)) { return 1; } diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/DxHunting.c b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/DxHunting.c index 8c731c920..548f86166 100755 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/DxHunting.c +++ b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/DxHunting.c @@ -185,6 +185,7 @@ UINT32 DrvGPIO_GetPhotoMovieModeFromMonitor(void) case PWR_ON_GPRS_INIT://A case PWR_ON_TIME_SYNC://B case PWR_ON_TIME_SEND: + case PWR_ON_MCU_UPDATA: #endif Save_MenuInfo(); g_uiBootMode = DX_HUNTING_MODE_OTHER; diff --git a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/IOCfg.h b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/IOCfg.h index 1ed13a329..03f058c28 100755 --- a/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/IOCfg.h +++ b/rtos/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S550/IOCfg.h @@ -240,8 +240,8 @@ extern BOOL GPIOMap_DetAudio(void); #define PAD_KEY_RIGHT PAD_PIN_CGPIO4 #define GPIO_KEY_PLAYBACK C_GPIO_17 // Key Playback (kmp) #define PAD_KEY_PLAYBACK PAD_PIN_CGPIO17 -#define GPIO_KEY_DOWN C_GPIO_20 // Key Down (kd) -#define PAD_KEY_DOWN PAD_PIN_CGPIO20 +#define GPIO_KEY_DOWN C_GPIO_6 // Key Down (kd) +#define PAD_KEY_DOWN PAD_PIN_CGPIO6 #define GPIO_KEY_MODE D_GPIO_4 // Key Mode (kmd) #define PAD_KEY_MODE PAD_PIN_DGPIO4 #define GPIO_KEY_MENU C_GPIO_21 // Key Menu (km) diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c b/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c index 9965772c4..ebf9a893e 100644 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_linuxboot.c @@ -846,7 +846,7 @@ static int make_bootargs(LINUXTMP_PARTITION *p_linuxtmp, unsigned int bootts_beg //static char bootargs[] = "root=/dev/ram0 rootfstype=ramfs rdinit=/linuxrc bootts=568047,1720128 resume_addr=0x00007e88 user_debug=0xff"; #if HUNTING_CAMERA_MCU == ENABLE char PowerOnModeStr[32] = {'\0'}; - snprintf(PowerOnModeStr, sizeof(PowerOnModeStr), "Mode=%d UpFw=%d",sf_get_power_on_mode(), sf_in_update()); + snprintf(PowerOnModeStr, sizeof(PowerOnModeStr), "Mode=%d UpFw=%d mcu=%d",sf_get_power_on_mode(), sf_in_update() , sf_in_mcu_update()); linuxboot_set_extra_bootarg(PowerOnModeStr); #endif p_linuxtmp->bootargs_addr = p_linuxtmp->tmp_curr; diff --git a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c index 8a6c206cc..83be31694 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c +++ b/rtos/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.c @@ -1730,6 +1730,7 @@ void sf_power_on_para_check_init(void) puiPara->FristSendDailyAndGps = 1; puiPara->GpsSendFlag = 0; memset(puiPara->SimIccid,'\0',sizeof(puiPara->SimIccid)); + //sf_dailyReport_refresh(); } else if(PowerOnMode == PWR_ON_TIME_SYNC) { @@ -1780,4 +1781,7 @@ void sf_power_on_para_check_init(void) Save_MenuInfo(); }*/ #endif -} \ No newline at end of file +} + + + diff --git a/rtos/code/driver/na51089/include/sf_mcu.h b/rtos/code/driver/na51089/include/sf_mcu.h index 1db44de03..16a54f268 100755 --- a/rtos/code/driver/na51089/include/sf_mcu.h +++ b/rtos/code/driver/na51089/include/sf_mcu.h @@ -59,6 +59,7 @@ #define PWR_ON_GPRS_INIT 0x0A #define PWR_ON_TIME_SYNC 0x0B #define PWR_ON_TIME_SEND 0x0C +#define PWR_ON_MCU_UPDATA 0x0F /*REG FUNCTION_SWTICH*/ #define PIR_OFF 0x00 @@ -527,6 +528,8 @@ UINT8 sf_convert_power_on_mode(void); void sf_hw_info_save(char *name,FST_FILE fd); void sf_set_iso_exp_lv(UINT32 adj, UINT32 iso, UINT32 exp, UINT32 lv); UINT32 sf_in_update(void); +UINT32 sf_in_mcu_update(void); int sf_base64_decode(const char * base64, char * bindata); +void sf_dailyReport_refresh(void); #endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_mcu.c b/rtos/code/driver/na51089/source/mcu/sf_mcu.c index df3bd52db..056cd7846 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_mcu.c +++ b/rtos/code/driver/na51089/source/mcu/sf_mcu.c @@ -391,12 +391,12 @@ UINT8 sf_mcu_power_on_para_get(MCUParam_t attrId) } else */ #endif - { - if(startMode > PWR_ON_TIME_SEND) //if start mode err, USB IN default power on SETUP - { - startMode = PWR_ON_SETUP; - } - } + // { + // if(startMode > PWR_ON_MCU_UPDATA) //if start mode err, USB IN default power on SETUP + // { + // startMode = PWR_ON_SETUP; + // } + // } printf(" start mode = %d \n", startMode); return startMode; } @@ -765,11 +765,22 @@ UINT32 sf_gpio_get_status(UINT32 ipin) } UINT32 sf_in_update(void) { - if(sf_gpio_get_status(GPIO_KEY_TEST)){ + if((sf_gpio_get_status(GPIO_KEY_TEST)) && (PWR_ON_SETUP == sf_get_power_on_mode())) + { return 1; } return 0; } +UINT32 sf_in_mcu_update(void) +{ + if((sf_gpio_get_status(GPIO_KEY_DOWN)) && (PWR_ON_SETUP == sf_get_power_on_mode())){ + return 1; + } + if(PWR_ON_MCU_UPDATA == sf_get_power_on_mode()){ + return 1; + } + return 0; +} /************************************************* Function: sf_mcu_dataready_get Description: @@ -2506,6 +2517,90 @@ void sf_hw_info_save(char *name,FST_FILE fd) #endif +/************************************************* + Function: sf_dailyReport_refresh + Description: refresh dailyreport + Input: N/A + Output: N/A + Return: N/A + Others: N/A +*************************************************/ +void sf_dailyReport_refresh(void) +{ + + UIMenuStoreInfo *puiPara = sf_ui_para_get(); + UINT32 preTimeValue = 0; + UINT32 dr1TimeValue = 0; + UINT32 dr2TimeValue = 0; + SF_PARA_TIME_S preRtcTime = { 0 }; + //sf_sys_rtc_time_get(&preRtcTime); + struct tm ctv = {0}; + ctv = hwclock_get_time(TIME_ID_CURRENT); + printf("%s:%d tm: %d : %d : %d : %d : %d : %d\n", __FUNCTION__, __LINE__,ctv.tm_year, ctv.tm_mon,ctv.tm_mday,ctv.tm_hour,ctv.tm_min,ctv.tm_sec); + preRtcTime.Year = ctv.tm_year; + preRtcTime.Mon = ctv.tm_mon; + preRtcTime.Day = ctv.tm_mday; + preRtcTime.Hour = ctv.tm_hour; + preRtcTime.Min = ctv.tm_min; + preRtcTime.Sec = ctv.tm_sec; + + preTimeValue = preRtcTime.Hour * 60 + preRtcTime.Min; + dr1TimeValue = puiPara->DailyReportTime.Hour * 60 + puiPara->DailyReportTime.Min; + dr2TimeValue = dr1TimeValue + (12 * 60); + + if(puiPara->ReDailyReport == 0) + { + //twice a day + if(((preTimeValue < dr1TimeValue) && (preTimeValue < dr2TimeValue)) || ((preTimeValue >= dr1TimeValue) && (preTimeValue >= dr2TimeValue))) + { + puiPara->DailyReportTime2.Hour = puiPara->DailyReportTime.Hour; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + else + { + puiPara->DailyReportTime2.Hour = (puiPara->DailyReportTime.Hour + 12) % 24; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + } + else + { + if((preTimeValue >= dr1TimeValue) && (preTimeValue < dr1TimeValue + 60)) + { + puiPara->DailyReportTime2.Hour = (puiPara->DailyReportTime.Hour + 1) % 24; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + else if((preTimeValue >= dr1TimeValue + 60) && (preTimeValue < dr2TimeValue)) + { + puiPara->DailyReportTime2.Hour = (puiPara->DailyReportTime.Hour + 12) % 24; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + else if((preTimeValue >= dr2TimeValue) && (preTimeValue < dr2TimeValue + 60)) + { + puiPara->DailyReportTime2.Hour = (puiPara->DailyReportTime.Hour + 12 + 1) % 24; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + else + { + puiPara->DailyReportTime2.Hour = puiPara->DailyReportTime.Hour; + puiPara->DailyReportTime2.Min = puiPara->DailyReportTime.Min; + } + } + + if(puiPara->DailyReportTestSwitch) + { + if(puiPara->ReDailyReport) + { + puiPara->DailyReportTime2.Hour = (preRtcTime.Hour + (preRtcTime.Min + 15) / 60) % 24; + puiPara->DailyReportTime2.Min = (preRtcTime.Min + 15) % 60; + } + else + { + puiPara->DailyReportTime2.Hour = (preRtcTime.Hour + (preRtcTime.Min + 5) / 60) % 24; + puiPara->DailyReportTime2.Min = (preRtcTime.Min + 5) % 60; + } + } +} + #if defined __FREERTOS int sf_mod_init(void)