1.mcu升级功能

This commit is contained in:
payton 2023-11-24 14:56:27 +08:00
parent d377144dc9
commit 40a52dc31c
20 changed files with 847 additions and 25 deletions

View File

@ -326,10 +326,12 @@ UINT8 sf_cardv_check_power_on_mode(void)
char *pStrSrc = NULL; char *pStrSrc = NULL;
char *pStrOtsOk = "Mode="; char *pStrOtsOk = "Mode=";
char *pStrUpFw = "UpFw="; char *pStrUpFw = "UpFw=";
char *pStrUpMcu = "mcu=";
char *temp = NULL; char *temp = NULL;
UINT8 startup = 0; UINT8 startup = 0;
UINT8 UpFw = 0; UINT8 UpFw = 0;
UINT8 Upmcu = 0;
system("cat /proc/cmdline > /tmp/Mode.txt"); system("cat /proc/cmdline > /tmp/Mode.txt");
fp = fopen("/tmp/Mode.txt","r"); 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); //printf("%s: UpFw=%d\r\n", __func__,UpFw);
sf_set_fw_update(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); free(pStrSrc);
} }

View File

@ -317,6 +317,7 @@ SRC = \
./code/source/systemMng/sf_commu_mcu_reg.c \ ./code/source/systemMng/sf_commu_mcu_reg.c \
./code/source/systemMng/sf_commu_mcu.c \ ./code/source/systemMng/sf_commu_mcu.c \
./code/source/systemMng/sys_usrmem.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_other.c \
./code/source/devMng/sf_dev_usb.c \ ./code/source/devMng/sf_dev_usb.c \
./code/source/devMng/sf_keymng.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/sf_blue_hal.c \
./code/source/sf_blue/src/util.c \ ./code/source/sf_blue/src/util.c \
./code/source/sf_blue/src/watch.c \ ./code/source/sf_blue/src/watch.c \
# ./code/source/wifi/sf_data_transfer.c \ # ./code/source/wifi/sf_data_transfer.c \
# ./code/source/wifi/sf_svr_send.c \ # ./code/source/wifi/sf_svr_send.c \
# ./code/source/wifi/sf_wifi_svr.c # ./code/source/wifi/sf_wifi_svr.c

View File

@ -81,7 +81,8 @@ void sf_set_module_update(UINT8 flag);
UINT8 sf_get_fw_update(void); UINT8 sf_get_fw_update(void);
void sf_set_fw_update(UINT8 flag); void sf_set_fw_update(UINT8 flag);
UINT8 sf_app_get_night_led_flag(void); 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 #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }

View File

@ -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

View File

@ -466,6 +466,8 @@ typedef enum sf_MCU_MESSAGE_TYPE_E
SF_MCU_CMD_MCU_VER = 0x1E00, SF_MCU_CMD_MCU_VER = 0x1E00,
SF_MCU_CMD_MCU_RTC = 0x1F00, SF_MCU_CMD_MCU_RTC = 0x1F00,
SF_MCU_CMD_SET_MCU = 0x1F01, SF_MCU_CMD_SET_MCU = 0x1F01,
SF_MCU_CMD_UPDATA = 0x1F02,
}SF_MCU_MESSAGE_TYPE_E; }SF_MCU_MESSAGE_TYPE_E;
typedef enum sf_PARA_MESSAGE_TYPE_E typedef enum sf_PARA_MESSAGE_TYPE_E

View File

@ -65,6 +65,7 @@ SINT32 app_auto_poweroff_start(void);
UINT8 sf_check_power_on_mode(void); UINT8 sf_check_power_on_mode(void);
void sf_power_off_msg_to_cardv(void); void sf_power_off_msg_to_cardv(void);
SINT32 sf_app_mcu_para_power_no_start(void); SINT32 sf_app_mcu_para_power_no_start(void);
SINT32 sf_app_mcu_updata_start(void);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }

View File

@ -112,6 +112,8 @@ int main(int argc, char *argv[])
SINT32 isUsb = 0; SINT32 isUsb = 0;
SINT32 isCard = 0; SINT32 isCard = 0;
SINT32 isUpdate = 0; SINT32 isUpdate = 0;
UINT8 isMcuUpdate = 0;
//SF_MESSAGE_BUF_S stMessageBuf = {0}; //SF_MESSAGE_BUF_S stMessageBuf = {0};
//BOOL autosend = FALSE; //BOOL autosend = FALSE;
SF_MUTEX_INIT_LOCK(Param_mutexLock); SF_MUTEX_INIT_LOCK(Param_mutexLock);
@ -130,7 +132,8 @@ int main(int argc, char *argv[])
//sf_set_fw_update(isUpdate); //sf_set_fw_update(isUpdate);
isUpdate = sf_get_fw_update(); 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) if(!isUsb)
{ {
@ -166,7 +169,7 @@ int main(int argc, char *argv[])
sf_set_bt_en(1); sf_set_bt_en(1);
} }
} }
if((0 == isUpdate) && (puiPara->GprsSwitch)) if((0 == isMcuUpdate) && (0 == isUpdate) && (puiPara->GprsSwitch))
{ {
sf_4G_usb_init(); sf_4G_usb_init();
app_RegisterNet_start(); app_RegisterNet_start();

View File

@ -64,6 +64,7 @@ SINT8 bmoduleupdate = 0;
static UINT8 ModuleUpdating = 0; static UINT8 ModuleUpdating = 0;
static UINT8 FwUpdate = 0; static UINT8 FwUpdate = 0;
static UINT8 IsNightLedOn = 0; static UINT8 IsNightLedOn = 0;
static UINT8 McuUpdateFlag = 0;
static SF_THREAD_CFG_S sf_msgQueueThread = static SF_THREAD_CFG_S sf_msgQueueThread =
{ {
@ -71,6 +72,15 @@ static SF_THREAD_CFG_S sf_msgQueueThread =
.TskId = -1, .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) 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()); sf_statistics_param_load(sf_statistics_param_get());
MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1); 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; break;
case FST_STA_DISK_UNFORMAT: case FST_STA_DISK_UNFORMAT:
//sf_set_card(1); //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: case SF_MCU_CMD_SET_MCU:
sf_mcu_reg_set(pMessageBuf->arg2, pMessageBuf->arg3); sf_mcu_reg_set(pMessageBuf->arg2, pMessageBuf->arg3);
break; break;
case SF_MCU_CMD_UPDATA:
break;
default: default:
break; break;
} }

View File

@ -43,6 +43,7 @@
#include "sf_file.h" #include "sf_file.h"
#include "sf_hal_ttyusb.h" #include "sf_hal_ttyusb.h"
#include "sf_commu_mcu.h" #include "sf_commu_mcu.h"
#include "sf_mcu_upgrade.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
extern "C" { extern "C" {
@ -135,6 +136,12 @@ SF_THREAD_S McuPowerOnTskCfg =
.TskId = -1, .TskId = -1,
}; };
SF_THREAD_S McuUpDataTskCfg =
{
.IsRun = 0,
.TskId = -1,
};
SINT8 debugFlag = 0; SINT8 debugFlag = 0;
UINT8 McuInitFlag = 0; UINT8 McuInitFlag = 0;
@ -1388,10 +1395,12 @@ UINT8 sf_check_power_on_mode(void)
char *pStrSrc = NULL; char *pStrSrc = NULL;
char *pStrOtsOk = "Mode="; char *pStrOtsOk = "Mode=";
char *pStrUpFw = "UpFw="; char *pStrUpFw = "UpFw=";
char *pStrUpMcu = "mcu=";
char *temp = NULL; char *temp = NULL;
UINT8 startup = 0; UINT8 startup = 0;
UINT8 UpFw = 0; UINT8 UpFw = 0;
UINT8 Upmcu = 0;
system("cat /proc/cmdline > /tmp/Mode.txt"); system("cat /proc/cmdline > /tmp/Mode.txt");
fp = fopen("/tmp/Mode.txt","r"); 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); //printf("%s: UpFw=%d\r\n", __func__,UpFw);
sf_set_fw_update(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); free(pStrSrc);
} }
@ -1563,4 +1578,51 @@ SINT32 sf_app_mcu_para_power_no_start(void)
} }
return SF_SUCCESS; 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;
} }

View File

@ -656,7 +656,15 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val)
mcuData[i++] = 0; mcuData[i++] = 0;
mcuReg[i] = SYS_STATUS; 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; mcuReg[i] = POWEROFF_TYPE;
temp = 0; temp = 0;
@ -1208,7 +1216,7 @@ UINT8 sf_get_module_sleep_flag(void)
int sf_app_while_flag(void) int sf_app_while_flag(void)
{ {
if((!sf_usb_IsInsert()) && (sf_get_power_off_flag() != 1) 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; return 1;
} }

View File

@ -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 <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#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

View File

@ -40,6 +40,8 @@ void sf_set_pir_statu_flag(BOOL flag);
void sf_set_auto_off_time(UINT16 time); void sf_set_auto_off_time(UINT16 time);
void sf_set_keep_alive_time(unsigned int time_s); void sf_set_keep_alive_time(unsigned int time_s);
UINT16 sf_get_auto_off_time(void); 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); UINT8 sf_get_fw_update(void);
void sf_set_fw_update(UINT8 flag); void sf_set_fw_update(UINT8 flag);
UINT8 sf_get_module_update(void); UINT8 sf_get_module_update(void);

View File

@ -97,6 +97,7 @@ static int shared_condition = 1;
static SINT32 WifiSocket = 0; static SINT32 WifiSocket = 0;
static UINT8 UiparaFlag = 0; static UINT8 UiparaFlag = 0;
static SF_BLE_STATUS_E BleStatus = SF_BLE_OK; static SF_BLE_STATUS_E BleStatus = SF_BLE_OK;
static UINT8 McuUpdateFlag = 0;
static SF_THREAD_S UpgradeTskParam = static SF_THREAD_S UpgradeTskParam =
{ {
@ -310,7 +311,7 @@ void sf_mode_detect(void)
//countDownOffFlg = 0; //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; AutoOfftime=0;
} }
@ -347,6 +348,17 @@ void sf_mode_detect(void)
} }
//printf("[%s:%d] e\n", __FUNCTION__, __LINE__); //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) UINT8 sf_get_module_update(void)
{ {
return ModuleUpdating; return ModuleUpdating;
@ -1775,7 +1787,7 @@ static SINT32 sf_cardv_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf)
switch(pMessageBuf->arg1) switch(pMessageBuf->arg1)
{ {
case SF_WIFI_CMD_START: 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(); sf_cardv_wifi_start();
break; break;
@ -2675,7 +2687,7 @@ UINT32 sf_cardv_wifi_start(void)
SINT32 ret = 1; SINT32 ret = 1;
UIMenuStoreInfo *puiPara = sf_ui_para_get(); 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) if(WifiTskCfg.IsRun)
{ {

View File

@ -2017,7 +2017,7 @@ void sf_calculate_daily_report(UINT8*dailyHour, UINT8*dailyMin)
int sf_while_flag(void) int sf_while_flag(void)
{ {
if((!sf_is_usb_flag()) && (POWEROFF != 1) 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; return 1;
} }

View File

@ -185,6 +185,7 @@ UINT32 DrvGPIO_GetPhotoMovieModeFromMonitor(void)
case PWR_ON_GPRS_INIT://A case PWR_ON_GPRS_INIT://A
case PWR_ON_TIME_SYNC://B case PWR_ON_TIME_SYNC://B
case PWR_ON_TIME_SEND: case PWR_ON_TIME_SEND:
case PWR_ON_MCU_UPDATA:
#endif #endif
Save_MenuInfo(); Save_MenuInfo();
g_uiBootMode = DX_HUNTING_MODE_OTHER; g_uiBootMode = DX_HUNTING_MODE_OTHER;

View File

@ -240,8 +240,8 @@ extern BOOL GPIOMap_DetAudio(void);
#define PAD_KEY_RIGHT PAD_PIN_CGPIO4 #define PAD_KEY_RIGHT PAD_PIN_CGPIO4
#define GPIO_KEY_PLAYBACK C_GPIO_17 // Key Playback (kmp) #define GPIO_KEY_PLAYBACK C_GPIO_17 // Key Playback (kmp)
#define PAD_KEY_PLAYBACK PAD_PIN_CGPIO17 #define PAD_KEY_PLAYBACK PAD_PIN_CGPIO17
#define GPIO_KEY_DOWN C_GPIO_20 // Key Down (kd) #define GPIO_KEY_DOWN C_GPIO_6 // Key Down (kd)
#define PAD_KEY_DOWN PAD_PIN_CGPIO20 #define PAD_KEY_DOWN PAD_PIN_CGPIO6
#define GPIO_KEY_MODE D_GPIO_4 // Key Mode (kmd) #define GPIO_KEY_MODE D_GPIO_4 // Key Mode (kmd)
#define PAD_KEY_MODE PAD_PIN_DGPIO4 #define PAD_KEY_MODE PAD_PIN_DGPIO4
#define GPIO_KEY_MENU C_GPIO_21 // Key Menu (km) #define GPIO_KEY_MENU C_GPIO_21 // Key Menu (km)

View File

@ -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"; //static char bootargs[] = "root=/dev/ram0 rootfstype=ramfs rdinit=/linuxrc bootts=568047,1720128 resume_addr=0x00007e88 user_debug=0xff";
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
char PowerOnModeStr[32] = {'\0'}; 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); linuxboot_set_extra_bootarg(PowerOnModeStr);
#endif #endif
p_linuxtmp->bootargs_addr = p_linuxtmp->tmp_curr; p_linuxtmp->bootargs_addr = p_linuxtmp->tmp_curr;

View File

@ -1730,6 +1730,7 @@ void sf_power_on_para_check_init(void)
puiPara->FristSendDailyAndGps = 1; puiPara->FristSendDailyAndGps = 1;
puiPara->GpsSendFlag = 0; puiPara->GpsSendFlag = 0;
memset(puiPara->SimIccid,'\0',sizeof(puiPara->SimIccid)); memset(puiPara->SimIccid,'\0',sizeof(puiPara->SimIccid));
//sf_dailyReport_refresh();
} }
else if(PowerOnMode == PWR_ON_TIME_SYNC) else if(PowerOnMode == PWR_ON_TIME_SYNC)
{ {
@ -1780,4 +1781,7 @@ void sf_power_on_para_check_init(void)
Save_MenuInfo(); Save_MenuInfo();
}*/ }*/
#endif #endif
} }

View File

@ -59,6 +59,7 @@
#define PWR_ON_GPRS_INIT 0x0A #define PWR_ON_GPRS_INIT 0x0A
#define PWR_ON_TIME_SYNC 0x0B #define PWR_ON_TIME_SYNC 0x0B
#define PWR_ON_TIME_SEND 0x0C #define PWR_ON_TIME_SEND 0x0C
#define PWR_ON_MCU_UPDATA 0x0F
/*REG FUNCTION_SWTICH*/ /*REG FUNCTION_SWTICH*/
#define PIR_OFF 0x00 #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_hw_info_save(char *name,FST_FILE fd);
void sf_set_iso_exp_lv(UINT32 adj, UINT32 iso, UINT32 exp, UINT32 lv); void sf_set_iso_exp_lv(UINT32 adj, UINT32 iso, UINT32 exp, UINT32 lv);
UINT32 sf_in_update(void); UINT32 sf_in_update(void);
UINT32 sf_in_mcu_update(void);
int sf_base64_decode(const char * base64, char * bindata); int sf_base64_decode(const char * base64, char * bindata);
void sf_dailyReport_refresh(void);
#endif #endif

View File

@ -391,12 +391,12 @@ UINT8 sf_mcu_power_on_para_get(MCUParam_t attrId)
} }
else */ else */
#endif #endif
{ // {
if(startMode > PWR_ON_TIME_SEND) //if start mode err, USB IN default power on SETUP // if(startMode > PWR_ON_MCU_UPDATA) //if start mode err, USB IN default power on SETUP
{ // {
startMode = PWR_ON_SETUP; // startMode = PWR_ON_SETUP;
} // }
} // }
printf(" start mode = %d \n", startMode); printf(" start mode = %d \n", startMode);
return startMode; return startMode;
} }
@ -765,11 +765,22 @@ UINT32 sf_gpio_get_status(UINT32 ipin)
} }
UINT32 sf_in_update(void) 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 1;
} }
return 0; 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 Function: sf_mcu_dataready_get
Description: Description:
@ -2506,6 +2517,90 @@ void sf_hw_info_save(char *name,FST_FILE fd)
#endif #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 #if defined __FREERTOS
int sf_mod_init(void) int sf_mod_init(void)