MW22-02A/BSP/Driver/getcfg/config_info.c

795 lines
25 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#include "config_info.h"
#include "getcfg.h"
#include "onchip_flash.h"
#include "bsp_ser.h"
#include "check.h"
#include "w25q128.h"
#include "encryption_chip.h"
#include "ds3231.h"
#include "udp.h"
u_int8_t g_device_local_ip[21];
u_int8_t g_device_mac[21];
u_int8_t g_device_netmask[21];
u_int8_t g_device_gateway[21];
u_int8_t g_device_term_ip[21];
u_int8_t g_device_a9_ip[21];
u_int8_t g_device_server_ip[21];
u_int8_t g_device_web_ip[21];
int ipStrValid( const char * str_ip,u_int8_t *rvalue);
/******************************************************************************
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>config.c
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صĺ<EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
static u_int8_t config_buff[1500];
/******************************************************************************
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>read_config_file
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>flash<EFBFBD>ж<EFBFBD>ini<EFBFBD>ļ<EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
static BOOL read_config_file(void)
{
if (!app_crc_OK(HY_PKG_TYPE_CFG_FILE)){//У<><D0A3>ʧ<EFBFBD><CAA7>
memset(system_info.cmd_id, 0x30, sizeof(system_info.cmd_id));
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
if (!pack_head_verify(HY_PKG_TYPE_CFG_FILE)){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
return TRUE;
}
/******************************************************************************
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>get_system_config_from_file(void)
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
BOOL get_system_config_from_file(void)
{
unsigned long ret =1;
if (!read_config_file())
return FALSE;
/******************************************************************************
[rf]<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
//RF
ret = GetConfigFromBuf("rf",
"host_type",
"0",
(char *)&sys_rf.host_type,
sizeof(sys_rf.host_type),
(char *)config_buff
);
if (ret != 0){
sys_rf.host_type -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡRF<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣʧ<EFBFBD><EFBFBD>\n\r");
// return FALSE;
}else{
term_printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
sys_rf.host_type -='0';
if (sys_rf.host_type == RF_HOST)
term_printf("RF(һ<><D2BB><EFBFBD><EFBFBD>)\n\r");
else if(sys_rf.host_type == RF_RELAY)
term_printf("RF(<28>м<EFBFBD><D0BC><EFBFBD><EFBFBD><EFBFBD>)\n\r");
else if(sys_rf.host_type == RF_UNDEFINE)
term_printf("<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>RF)\n\r");
}
//rf_sync_num
if(sys_rf.host_type != RF_UNDEFINE){
ret = GetConfigFromBuf("rf",
"sync_num",
"HY0000",
(char *)sys_rf.sync_num,
sizeof(sys_rf.sync_num),
(char *)config_buff
);
if (ret != 0)
term_printf("\n<EFBFBD><EFBFBD>ȡRFͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
else
term_printf("RFͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %s\n\r",sys_rf.sync_num);
}
/******************************************************************************
[host_mk60_cfg]
*******************************************************************************/
//Ӳ<><D3B2><EFBFBD><EFBFBD><E6B1BE>
ret = GetConfigFromBuf("host_mk60_cfg",
"hardwarever",
"00000000000000",
(char *)system_info.hardware_version,
sizeof(system_info.hardware_version),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡӲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %s\n\r",system_info.hardware_version);
}
//<2F><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>ΨһCMDid<69><64>
ret = GetConfigFromBuf("host_mk60_cfg",
"cmd_id",
"HY_OLMS_000000000",
(char *)system_info.cmd_id,//<2F>ն<EFBFBD>id
sizeof(system_info.cmd_id),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ԴIDʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("<EFBFBD><EFBFBD>ԴID: %s\n\r",system_info.cmd_id);
}
//<2F><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸id<69><64>
ret = GetConfigFromBuf("host_mk60_cfg",
"component_id",
"SD__0000000000",
(char *)system_info.component_id,
sizeof(system_info.component_id),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IDʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID; %s\n\r",system_info.component_id);
}
/******************************************************************************
net
*******************************************************************************/
//[local]
//ip
ret = GetConfigFromBuf("local",
"ip",
"172.16.17.14",
(char *)g_device_local_ip,
sizeof(g_device_local_ip),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ip<EFBFBD><EFBFBD>ַʧ<EFBFBD><EFBFBD><><C4AC> :%s\n\r",g_device_local_ip);
ipStrValid((const char *)g_device_local_ip,g_local_ip);
}else{
term_printf("local_ip; %s\n\r",g_device_local_ip);
ipStrValid((const char *)g_device_local_ip,g_local_ip);
}
//mac
ret = GetConfigFromBuf("local",
"mac",
"00:01:00:00:00:02",
(char *)g_device_mac,
sizeof(g_device_mac),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡmac<EFBFBD><EFBFBD>ַʧ<EFBFBD><EFBFBD><><C4AC> :%s\n\r",g_device_mac);
macStrValid((const char *)g_device_mac,g_local_mac);
}else{
term_printf("mac; %s\n\r",g_device_mac);
macStrValid((const char *)g_device_mac,g_local_mac);
}
//netmask
ret = GetConfigFromBuf("local",
"netmask",
"255.255.252.0",
(char *)g_device_netmask,
sizeof(g_device_netmask),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>netmask: %s\n\r",g_device_netmask);
ipStrValid((const char *)g_device_netmask,g_netmask);
}else{
term_printf("netmask; %s\n\r",g_device_netmask);
ipStrValid((const char *)g_device_netmask,g_netmask);
}
//gateway
ret = GetConfigFromBuf("local",
"gateway",
"172.16.16.54",
(char *)g_device_gateway,
sizeof(g_device_gateway),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>Ĭ<EFBFBD><EFBFBD>gateway: %s\n\r",g_device_gateway);
ipStrValid((const char *)g_device_gateway,g_gateway);
}else{
term_printf("gateway; %s\n\r",g_device_gateway);
ipStrValid((const char *)g_device_gateway,g_gateway);
}
//[server]
//[term]
ret = GetConfigFromBuf("server",
"term_ip",
"172.16.17.11",
(char *)g_device_term_ip,
sizeof(g_device_term_ip),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡ<EFBFBD>ն<EFBFBD>ip<EFBFBD><EFBFBD>ַʧ<EFBFBD><EFBFBD><><C4AC> :%s\n\r",g_device_term_ip);
ipStrValid((const char *)g_device_term_ip,net_devices[0].ip);
}else{
term_printf("term_ip; %s\n\r",g_device_term_ip);
//ת<><D7AA><EFBFBD><EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD>ַ
ipStrValid((const char *)g_device_term_ip,net_devices[0].ip);
}
//a9 ip
ret = GetConfigFromBuf("server",
"a9_ip",
"172.16.16.54",
(char *)g_device_a9_ip,
sizeof(g_device_a9_ip),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a9 ip<69><70>ַʧ<D6B7><CAA7><><C4AC> :%s\n\r",g_device_a9_ip);
ipStrValid((const char *)g_device_a9_ip,net_devices[1].ip);
}else{
term_printf("a9_ip; %s\n\r",g_device_a9_ip);
ipStrValid((const char *)g_device_a9_ip,net_devices[1].ip);
}
//web ip
ret = GetConfigFromBuf("server",
"web_ip",
"118.123.114.8",
(char *)g_device_web_ip,
sizeof(g_device_web_ip),
(char *)config_buff
);
if (ret != 0){
term_printf("<EFBFBD><EFBFBD>ȡweb ip<69><70>ַʧ<D6B7><CAA7><><C4AC> :%s\n\r",g_device_web_ip);
ipStrValid((const char *)g_device_web_ip,net_devices[4].ip);
}else{
term_printf("web_ip; %s\n\r",g_device_web_ip);
ipStrValid((const char *)g_device_web_ip,net_devices[4].ip);
}
/******************************************************************************
[cert]
*******************************************************************************/
//֤<><D6A4><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>
//batch_num
ret = GetConfigFromBuf("cert",
"batch_num",
"000",
(char *)system_info.batch_num,
sizeof(system_info.batch_num),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡ֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("\n֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>: ");
term_printf("%s\n\r",system_info.batch_num);
}
//ͬһ<CDAC><D2BB><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
ret = GetConfigFromBuf("cert",
"serial_num",
"0000",
(char *)system_info.cert_num,
sizeof(system_info.cert_num),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡ֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>: ");
term_printf("%s\n\r",system_info.cert_num);
}
//<2F><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>id
ret = GetConfigFromBuf("cert",
"encryption_id",
"ENCRYPTION_000000",
(char *)system_info.encryption_id,
sizeof(system_info.encryption_id),
(char *)config_buff
);
if (ret != 0){
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>豸IDʧ<EFBFBD><EFBFBD>\n\r");
}else{
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD>豸ID; %s\n\r",system_info.encryption_id);
}
/******************************************************************************
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
ret = GetConfigFromBuf("bat",
"bat1_cfg",
"0",
(char *)&sys_bat.bat1_cfg,
sizeof(sys_bat.bat1_cfg),
(char *)config_buff
);
if (ret != 0){
sys_bat.bat1_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
sys_bat.bat1_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
if (sys_bat.bat1_cfg)
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r");
else
term_printf("<EFBFBD>ر<EFBFBD>\n\r");
}
//<2F><><EFBFBD><EFBFBD>2<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
ret = GetConfigFromBuf("bat",
"bat2_cfg",
"0",
(char *)&sys_bat.bat2_cfg,
sizeof(sys_bat.bat2_cfg),
(char *)config_buff
);
if (ret != 0){
sys_bat.bat2_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
sys_bat.bat2_cfg -='0';
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
if (sys_bat.bat2_cfg)
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r");
else
term_printf("<EFBFBD>ر<EFBFBD>\n\r");
}
//<2F><><EFBFBD><EFBFBD>3<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
ret = GetConfigFromBuf("bat",
"bat3_cfg",
"0",
(char *)&sys_bat.bat3_cfg,
sizeof(sys_bat.bat3_cfg),
(char *)config_buff
);
if (ret != 0){
sys_bat.bat3_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
sys_bat.bat3_cfg -='0';
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
if (sys_bat.bat3_cfg)
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r");
else
term_printf("<EFBFBD>ر<EFBFBD>\n\r");
}
//<2F><><EFBFBD><EFBFBD>4<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
ret = GetConfigFromBuf("bat",
"bat4_cfg",
"0",
(char *)&sys_bat.bat4_cfg,
sizeof(sys_bat.bat4_cfg),
(char *)config_buff
);
if (ret != 0){
sys_bat.bat4_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
sys_bat.bat4_cfg -='0';
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
if (sys_bat.bat4_cfg)
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r");
else
term_printf("<EFBFBD>ر<EFBFBD>\n\r");
}
//<2F><><EFBFBD><EFBFBD>5<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
ret = GetConfigFromBuf("bat",
"bat5_cfg",
"0",
(char *)&sys_bat.bat5_cfg,
sizeof(sys_bat.bat5_cfg),
(char *)config_buff
);
if (ret != 0){
sys_bat.bat5_cfg -='0';
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
}else{
sys_bat.bat5_cfg -='0';
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>5<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ");
if (sys_bat.bat5_cfg)
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n\r");
else
term_printf("<EFBFBD>ر<EFBFBD>\n\r");
}
/******************************************************************************
*******************************************************************************/
//<2F><><EFBFBD><EFBFBD>FLASH<53><EFBFBD><E6B4A2><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
Flash_Read((u_int8_t *)&device_work_information,FLASH_DEVICE_WORK_INFO_ADDR_BEGIN,sizeof(device_work_information));
if((device_work_information.head == DEVICE_SAVE_HEAD)&&(device_work_information.end == DEVICE_SAVE_END)){
g_device_last_save_total_working_time = device_work_information.total_work_time;
g_send_flow = device_work_information.total_send_flow;
g_receive_flow = device_work_information.total_receive_flow;
g_hy_send_flow = device_work_information.hy_total_send_flow;
g_hy_receive_flow = device_work_information.hy_total_receive_flow;
}
BSP_OS_TimeDlyMs(10);
term_printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d\n\r",g_send_flow);
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d\n\r",g_receive_flow);
term_printf("<EFBFBD><EFBFBD>Դͨ<EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d\n\r",g_hy_send_flow);
term_printf("<EFBFBD><EFBFBD>Դͨ<EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d\n\r",g_hy_receive_flow);
return TRUE;
}
/******************************************************************************
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> get_key_from_file
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>flash<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD>ļ<EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
BOOL get_key_from_file(void)
{
hy_release_file_head h_read;
if (!app_crc_OK(HY_PKG_TYPE_PUB_KEY)){//У<><D0A3>ʧ<EFBFBD><CAA7>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD>Կ<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
if (!pack_head_verify(HY_PKG_TYPE_CERT)){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD>Կ<EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
Flash_Read((u_int8_t *)&h_read, KEY_HEAD_BEGIN, sizeof(h_read));
memcpy(system_info.key,&config_buff[4],(h_read.data_len)-4);//copy<70><79>Կ//150813<31><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ǰ4<C7B0><34><EFBFBD><EFBFBD>Ч<EFBFBD>ֽ<EFBFBD>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD>Կ<EFBFBD>ɹ<EFBFBD>\n\r");//ȥ<><C8A5>ǰ4<C7B0><34><EFBFBD>ֽ<EFBFBD>
if (encryption_chip_sm2_import_public_key(1,system_info.key)){
term_printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD><EFBFBD>밲ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD>Կ<EFBFBD>ɹ<EFBFBD>");
}else
term_printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD><EFBFBD>밲ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨<EFBFBD><EFBFBD>Կʧ<EFBFBD><EFBFBD>");
return TRUE;
}
/******************************************************************************
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD> get_cert1_from_file
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>flash<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD>ļ<EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
BOOL get_cert1_from_file(void)
{
hy_release_file_head h_read;
if (!app_crc_OK(HY_PKG_TYPE_CERT)){//У<><D0A3>ʧ<EFBFBD><CAA7>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ֤<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
if (!pack_head_verify(HY_PKG_TYPE_CERT)){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ֤<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
Flash_Read((u_int8_t *)&h_read, CERT_HEAD_BEGIN, sizeof(h_read));
memcpy(system_info.cert1,config_buff,h_read.data_len);//copy<70><79>ȫ֤<C8AB><D6A4>
system_info.cert1_len = h_read.data_len;//֤<><EFBFBD><E9B3A4>
if (system_info.cert1_len < 200){
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ֤<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n\r");
return FALSE;
}
term_printf("\n<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ȫ֤<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>\n\r");
return TRUE;
}
/******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:check_sum
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
static u_int8_t check_sum(u_int8_t *p, int len)
{
u_int8_t ret = 0;
int i = 0;
for(; i<len; i++)
{
ret += p[i];
}
return (~ret)+1;
}
/******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:upgrade_pkg_head_checksum_OK
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>checksum
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
u_int8_t upgrade_pkg_head_checksum_OK(hy_release_file_head *pkg_head)
{
return check_sum((u_int8_t *)pkg_head, (u_int8_t *)(&pkg_head->head_checksum) - (u_int8_t *)pkg_head)
== pkg_head->head_checksum;
}
/******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>ext_flash_erase
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>rom<EFBFBD>еĴ<EFBFBD>ռ<EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
BOOL ext_flash_erase(hy_release_file_head *pkg_head)
{
u_int32_t total_len = pkg_head->data_len;
if(pkg_head->file_type == HY_PKG_TYPE_PUB_KEY){
if((pkg_head->addr + total_len) > KEY_ADDR_END)
return FALSE;
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,KEY_HEAD_SECTOR_BEGIN);
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,KEY_SECTOR_BEGIN);
}else if(pkg_head->file_type == HY_PKG_TYPE_CERT){
if((pkg_head->addr + total_len) > CERT_ADDR_END)
return FALSE;
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,CERT_HEAD_SECTOR_BEGIN);
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,CERT_SECTOR_BEGIN);
}else if(pkg_head->file_type == HY_PKG_TYPE_CFG_FILE){
if((pkg_head->addr + total_len) > CFG_FILE_ADDR_END)
return FALSE;
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,CFG_FILE_HEAD_SECTOR_BEGIN);
Flash_Erase_Sector(EXT_FLASH_BLOCK_NUM,CFG_FILE_SECTOR_BEGIN);
}
return TRUE;
}
/******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: app_crc_OK
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>rom<EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ͨ<EFBFBD><EFBFBD>crc16<EFBFBD><EFBFBD>ʽУ<EFBFBD><EFBFBD>
** <EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
******************************************************************************/
BOOL app_crc_OK(u_int8_t file_type)
{
u_int16_t crc16;
hy_release_file_head h_read;
u_int8_t crc16_read2[2] = {0x00};
u_int32_t read_addr = 0;
u_int32_t read_len = 0;
if (file_type == HY_PKG_TYPE_CERT){
Flash_Read((u_int8_t *)&h_read, CERT_HEAD_BEGIN, sizeof(h_read)-1);
if(h_read.file_type != HY_PKG_TYPE_CERT)
return FALSE;
if (!upgrade_pkg_head_checksum_OK(&h_read))
return FALSE;
read_addr = CERT_ADDR_BEGIN;
}else if (file_type == HY_PKG_TYPE_PUB_KEY){
Flash_Read((u_int8_t *)&h_read, KEY_HEAD_BEGIN, sizeof(h_read)-1);
if(h_read.file_type != HY_PKG_TYPE_PUB_KEY)
return FALSE;
if (!upgrade_pkg_head_checksum_OK(&h_read))
return FALSE;
read_addr = KEY_ADDR_BEGIN;
}else if (file_type == HY_PKG_TYPE_CFG_FILE){
Flash_Read((u_int8_t *)&h_read,CFG_FILE_HEAD_BEGIN, sizeof(h_read)-1);
if(h_read.file_type != HY_PKG_TYPE_CFG_FILE)
return FALSE;
if (!upgrade_pkg_head_checksum_OK(&h_read))
return FALSE;
read_addr = CFG_FILE_ADDR_BEGIN;
}
CRC16_init(&crc16);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷcrc
CRC16_update(&crc16,(u_int8_t *)&h_read, sizeof(h_read)-1);
read_len = h_read.data_len; //<2F><><EFBFBD><EFBFBD>crc16<31><36><EFBFBD><EFBFBD>
if(read_len > 1000)
return FALSE;
Flash_Read(config_buff, read_addr,read_len);
Flash_Read((u_int8_t *)crc16_read2, read_addr+read_len,sizeof(u_int16_t));
CRC16_update(&crc16,config_buff, read_len);
return crc16 == *(u_int16_t *)&crc16_read2;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: write_pack_head_to_ext_flash
*<EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>д<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD>flash<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD>ģ<EFBFBD>
******************************************************************************/
BOOL write_pack_head_to_ext_flash(hy_release_file_head *pkg_head)
{
if(pkg_head->file_type == HY_PKG_TYPE_PUB_KEY){
Flash_Write_MorePage((u_int8_t *)pkg_head,KEY_HEAD_BEGIN,sizeof(*pkg_head));
}else if(pkg_head->file_type == HY_PKG_TYPE_CERT){
Flash_Write_MorePage((u_int8_t *)pkg_head,CERT_HEAD_BEGIN,sizeof(*pkg_head));
}else if(pkg_head->file_type == HY_PKG_TYPE_CFG_FILE){
Flash_Write_MorePage((u_int8_t *)pkg_head,CFG_FILE_HEAD_BEGIN,sizeof(*pkg_head));
}
return TRUE;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: write_file_to_ext_flash
*<EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>д<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿflash<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD>ģ<EFBFBD>
******************************************************************************/
BOOL write_file_to_ext_flash(hy_release_file_head *pkg_head)
{;
u_int32_t len = pkg_head->data_len + sizeof(u_int16_t); //<2F><><EFBFBD><EFBFBD>+crc16
u_int32_t write_addr = pkg_head->addr;
Flash_Write_MorePage(pkg_head->data,write_addr,len);
return TRUE;
}
/******************************************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: pack_head_verify
*<EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD> <EFBFBD>ģ<EFBFBD>
******************************************************************************/
BOOL pack_head_verify(u_int8_t file_type)
{
hy_release_file_head pkg_head = {0x00};
u_int32_t read_addr;
if (file_type == HY_PKG_TYPE_PUB_KEY){
read_addr = KEY_HEAD_BEGIN;
}else if (file_type == HY_PKG_TYPE_CERT){
read_addr = CERT_HEAD_BEGIN;
}else if (file_type == HY_PKG_TYPE_CFG_FILE){
read_addr = CFG_FILE_HEAD_BEGIN;
}
Flash_Read((u_int8_t *)&pkg_head,read_addr, sizeof(pkg_head)-1);
//<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.data_len) > (1024*2))
return FALSE;
//<2F><>ʼ<EFBFBD><CABC>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
if(pkg_head.flag != HY_RELEASE_FILE_FLAG)
return FALSE;
//ͷ<><CDB7><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
if(pkg_head.head_len != (sizeof(pkg_head)-1))
return FALSE;
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> boot app cert key cfg_file
if((pkg_head.file_type != HY_PKG_TYPE_APP) && (pkg_head.file_type != HY_PKG_TYPE_BOOT_LOADER) && (pkg_head.file_type != HY_PKG_TYPE_CERT) && (pkg_head.file_type != HY_PKG_TYPE_PUB_KEY)&& (pkg_head.file_type != HY_PKG_TYPE_CFG_FILE))
return FALSE;
//<2F>ļ<EFBFBD><C4BC><EFBFBD>ʽ<EFBFBD>
if(pkg_head.file_format_ver != 1)
return FALSE;
if(pkg_head.file_type == HY_PKG_TYPE_APP){ //App
//<2F><>д<EFBFBD><D0B4>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
if(pkg_head.addr < APP_ADDR_BEGIN)
return FALSE;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.addr + pkg_head.data_len) > APP_ADDR_END)
return FALSE;
}else if(pkg_head.file_type == HY_PKG_TYPE_BOOT_LOADER){ //Bootloader
//<2F><>д<EFBFBD><D0B4>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
if(pkg_head.addr != 0) //bootloader<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><30><CEAA>ʼ<EFBFBD><CABC>ַ
return FALSE;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.addr + pkg_head.data_len) > BOOTLOADER_ADDR_END)
return FALSE;
}else if(pkg_head.file_type == HY_PKG_TYPE_CERT){//CERT
//<2F><>д<EFBFBD><D0B4>ַ
if(pkg_head.addr < CERT_ADDR_BEGIN)
return FALSE;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.addr + pkg_head.data_len) > CERT_ADDR_END)
return FALSE;
}else if(pkg_head.file_type == HY_PKG_TYPE_PUB_KEY){//KEY
//<2F><>д<EFBFBD><D0B4>ַ
if(pkg_head.addr < KEY_ADDR_BEGIN)
return FALSE;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.addr + pkg_head.data_len) > KEY_ADDR_END)
return FALSE;
}else if(pkg_head.file_type == HY_PKG_TYPE_CFG_FILE){//CFG FILE
//<2F><>д<EFBFBD><D0B4>ַ
if(pkg_head.addr < CFG_FILE_ADDR_BEGIN)
return FALSE;
//<2F>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
if((pkg_head.addr + pkg_head.data_len) > CFG_FILE_ADDR_END)
return FALSE;
}
return TRUE;
}
//<2F><><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC>flash<73><68><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
void erase_ext_flash(u_int8_t block_begin,u_int32_t total_len)
{
int i = 0;
int block_count = total_len / Flash_BLOCKBYTE_LENGTH;
if(total_len % Flash_BLOCKBYTE_LENGTH)
block_count++;
for(i = 0; i<block_count; i++){
Flash_Erase_Block(block_begin + i);
BSP_OS_TimeDlyMs(10);
}
}
/******************************************************************************
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
** <EFBFBD><EFBFBD> <EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>192.168.8.1<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>192 168 8 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
** <EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
int ipStrValid( const char * str_ip,u_int8_t *rvalue)
{
char p[20];
int n,i,dotnumber,j;
int num_len=0;
char k[4];
memset(p,0,sizeof(p));
if(str_ip==NULL)
return 0;
n=strlen(str_ip);
if(n==0)
return 0;
j=0;
dotnumber=0;
for(i=0;i<n;i++)
{
if(str_ip[i]=='.')
{
p[j]=0;
num_len = strlen(p);
if( num_len == 0 )
return 0;
k[dotnumber] = atoi(p);
//if(k[dotnumber]>252)
// return 0;
dotnumber++;
if(dotnumber>3)
return 0;
j=0;
continue;
}
else if( (str_ip[i]<='9') && (str_ip[i]>='0') )
{
p[j++]=str_ip[i];
}
else
{
return 0;
}
}
p[j]=0;
k[3]=atoi(p);
if(dotnumber!=3)
return 0;
if(k[3]>=255)//Ĭ<>ϲ<EFBFBD><CFB2>ܵ<EFBFBD><DCB5><EFBFBD>255 <20><EFBFBD><E3B2A5>ַ
return 0;
memcpy(rvalue,k,4);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return 1;
};