Files
vd_960/vd960DBN/BLE/OnlyUpdateApp_Peripheral/APP/cfig_flash.c
wangfq 95808f9f25 refactor(vd960Loop): 算法回退到 DLD154V4B,四通道适配
- 用 DLD154V4B vd1_task/per_channel 替换 vds_task 复杂算法
- 移除 FUNCTION_B/二次判断/快速变化/多重确认等增强特性
- 保留平坦性离开算法 (CN200910309382),每通道独立状态
- 灵敏度表改为 DLD154V4B 4级: {216,108,36,10} / {108,72,18,9}
- 清理废弃类型: FltHistoryManager, Loop_ACS_Info, StageRangeConfig 等
- 首次添加 vd960DBN 完整源码
2026-06-25 16:21:57 +08:00

429 lines
13 KiB
C

/**
******************************************************************************
* @file CFIG_FLASH.h
* @author wfq
* @version V1.0
* @date 2025-02-07
* @brief ??????????¡ã?¡À???????????????
* @attention
******************************************************************************
*/
#include "storage.h"
#include "config.h"
#include "cmcng.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "net_srv.h"
#define DEV_USER_FLASH_MAGIC PRODUCT_MODEL
#define CFG_FLASH_BLOCK_SIZE 0x200
#define DEV_CNG_ADDR_BASE (0x00) // + 0x200)
void factory_dev_info(void)
{
uint16_t i, j;
uint32_t _offset = 0;
uint16_t len = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
memcpy(mBuff, DEV_USER_FLASH_MAGIC, sizeof(DEV_USER_FLASH_MAGIC));
_offset = DEV_NUMER_ADDR_OFFSET;
memcpy(g_dev_number, gMacAddr, 6);
memcpy(&mBuff[_offset], g_dev_number, sizeof(g_dev_number));
mBuff[DEV_SUB_CODE_ADDR_OFFSET] = 0x01; // SSC net
mBuff[DEV_BUS_BAUD_ADDR_OFFSET] = BT_DISABLE_IDLE_TIMEOUT;
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 1] = (uint8_t)UART_BAUD_DEFAULT_PORT_1;
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 2] = (uint8_t)(UART_BAUD_DEFAULT_PORT_1 >> 8);
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 3] = (uint8_t)(UART_BAUD_DEFAULT_PORT_1 >> 16);
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 4] = 0x02;
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 5] = (uint8_t)UART_BAUD_DEFAULT_PORT_2;
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 6] = (uint8_t)(UART_BAUD_DEFAULT_PORT_2 >> 8);
mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 7] = (uint8_t)(UART_BAUD_DEFAULT_PORT_2 >> 16);
sprintf((char *)(&mBuff[DEV_PASSWORD_ADDR_OFFSET]), "%s", "123456");
// for(i = 0; i < CFG_FLASH_BLOCK_SIZE; i++){
// PRINT(" %02X", mBuff[i]);
// }
// PRINT("\nWill_Write_cng:");
SPI_Flash_Write(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
free(mBuff);
Delay_Ms(50);
Local_Net_Cfg lcfg = {
{gMacAddr[0], gMacAddr[1], gMacAddr[2], gMacAddr[3], gMacAddr[4], gMacAddr[5]},
{192,168,1,188},
{255,255,255,0},
{192,168,1,1},
{192,168,1,1},
5550,NET_REPORT_INTERVAL, 5505, // Master Port: tcp, udp, udp_message
5550, 4900 // Dev Port: tcp, udp
};
NET_CENTER_INFO ccfg = {
{192,168,1,222},
4999,5550,NET_REPORT_INTERVAL, {1,2}
};
IOT_NET_INFO icfg = {
"121.37.20.199",
1883,
" ",
"admin",
"password",
0
};
IOT_Topic _topic = {
0,
TOPIC_DEFAULT_PUBLISH,
TOPIC_DEFAULT_SUBSCRIBE
};
write_net_config(&lcfg, &ccfg, &icfg, &_topic);
}
char get_ble_safe_flag(void)
{
return g_ble_safe_flag;
}
void open_ble_safe_flag(void)
{
if(g_ble_safe_flag == 1)
{
return;
}
g_ble_safe_counter_dst = 0;
g_ble_safe_counter_ori = g_ble_safe_counter_dst;
g_ble_safe_flag = 1;
}
void close_ble_safe_flag(void)
{
if(g_ble_safe_flag == 0)
{
return;
}
g_ble_safe_flag = 0;
}
char check_ble_safe_pass(uint8_t * devpass)
{
if((g_dev_password[0] != devpass[0]) ||
(g_dev_password[1] != devpass[1]) ||
(g_dev_password[2] != devpass[2]) ||
(g_dev_password[3] != devpass[3]) ||
(g_dev_password[4] != devpass[4]) ||
(g_dev_password[5] != devpass[5]))
{
close_ble_safe_flag();
return 0;
}
open_ble_safe_flag();
return 1;
}
void set_ble_safe_pass(uint8_t * devpass)
{
uint16_t len = 0;
uint16_t _offset = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
_offset = DEV_PASSWORD_ADDR_OFFSET;
mBuff[_offset++] = devpass[0];
mBuff[_offset++] = devpass[1];
mBuff[_offset++] = devpass[2];
mBuff[_offset++] = devpass[3];
mBuff[_offset++] = devpass[4];
mBuff[_offset++] = devpass[5];
SPI_Flash_Write(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
free(mBuff);
}
void write_net_config(Local_Net_Cfg *local, NET_CENTER_INFO *center, IOT_NET_INFO *iotcfg, IOT_Topic *iottopic)
{
uint16_t i;
uint32_t _offset = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
_offset = NET_LOCAL_CFG_ADDR_OFFSET;
memcpy(&mBuff[_offset], local, sizeof(Local_Net_Cfg));
_offset = NET_CENTER_CFG_ADDR_OFFSET;
memcpy(&mBuff[_offset], center, sizeof(NET_CENTER_INFO));
_offset = IOT_NET_CFG_ADDR;
memcpy(&mBuff[_offset], iotcfg, sizeof(IOT_NET_INFO));
_offset = IOT_TOPIC_CFG_ADDR;
memcpy(&mBuff[_offset], iottopic, sizeof(IOT_Topic));
// for(i = 0; i < CFG_FLASH_BLOCK_SIZE; i++){
// PRINT(" %02X", mBuff[i]);
// }
// PRINT(" \nEND_Factory\n");
SPI_Flash_Write(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
free(mBuff);
Delay_Ms(50);
}
void load_cfg_from_flash(void)
{
uint16_t i, j;
uint32_t _offset = 0;
uint16_t len = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
// for(i = 0; i < CFG_FLASH_BLOCK_SIZE; i++){
// PRINT(" %02X", mBuff[i]);
// }
// PRINT("\n");
if(strncmp(mBuff, DEV_USER_FLASH_MAGIC, sizeof(DEV_USER_FLASH_MAGIC)) != 0)
{
free(mBuff);
PRINT("Will_Factory_dev_____\n");
factory_dev_info();
NVIC_SystemReset();
}
_offset = DEV_NUMER_ADDR_OFFSET;
memcpy(g_dev_number, &mBuff[_offset], 6);
memcpy(g_dev_number, &mBuff[DEV_NUMER_ADDR_OFFSET], 6); //
sprintf(g_dev_number_str, "%02X%02X%02X%02X%02X%02X",g_dev_number[0],g_dev_number[1],g_dev_number[2],g_dev_number[3],g_dev_number[4],g_dev_number[5]);
g_sub_code_enable.code_set = *(uint16_t *)(&mBuff[DEV_SUB_CODE_ADDR_OFFSET]);
g_max_counter_bt_min = mBuff[DEV_BUS_BAUD_ADDR_OFFSET];
g_max_counter_bt_timeout = g_max_counter_bt_min * 60 * 1000;
g_storage_uart_baud = (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 1]) | (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 2] << 8) | (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 3] << 16);
g_storage_uart_baud_2 = (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 5]) | (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 6] << 8) | (mBuff[DEV_BUS_BAUD_ADDR_OFFSET + 7] << 16);
memcpy(g_dev_password, &mBuff[DEV_PASSWORD_ADDR_OFFSET], 6);
memcpy(local_net_cfg.mac, g_dev_number, 6);
_offset = NET_LOCAL_CFG_ADDR_OFFSET;
Local_Net_Cfg *lnet = (Local_Net_Cfg *)(&mBuff[_offset]);
// memcpy(local_net_cfg.mac, lnet->mac, 6);
memcpy(local_net_cfg.lip, lnet->lip, 4);
memcpy(local_net_cfg.sub, lnet->sub, 4);
memcpy(local_net_cfg.gw, lnet->gw, 4);
memcpy(local_net_cfg.dns, lnet->dns, 4);
local_net_cfg.port_ssc_tcp = lnet->port_ssc_tcp;
local_net_cfg.port_ssc_udp = lnet->port_ssc_udp;
local_net_cfg.port_ssc_udp_message = lnet->port_ssc_udp_message;
local_net_cfg.port_dev_tcp = lnet->port_dev_tcp;
local_net_cfg.port_dev_udp = lnet->port_dev_udp;
_offset = NET_CENTER_CFG_ADDR_OFFSET;
NET_CENTER_INFO *cinfo = (NET_CENTER_INFO *)(&mBuff[_offset]);
memcpy(net_center_info.lssc_ip, cinfo->lssc_ip, 4);
net_center_info.msg_port = cinfo->msg_port;
net_center_info.tcp_port = cinfo->tcp_port;
net_center_info.udp_port = cinfo->udp_port;
memcpy(net_center_info.sw_ver, cinfo->sw_ver, 2);
_offset = IOT_NET_CFG_ADDR;
IOT_NET_INFO *iinfo = (IOT_NET_INFO *)(&mBuff[_offset]);
memcpy(iot_net_info.remote_addr, iinfo->remote_addr, 64);
iot_net_info.mqtt_port = iinfo->mqtt_port;
memcpy(iot_net_info.client_id, iinfo->client_id, 64);
memcpy(iot_net_info.username, iinfo->username, 64);
memcpy(iot_net_info.password, iinfo->password, 32);
//check dns or ip mode
iot_net_info.mode = iinfo->mode; //dns or ip mode
_offset = IOT_TOPIC_CFG_ADDR;
IOT_Topic *_topic = (IOT_Topic *)(&mBuff[_offset]);
g_iot_topic.clientid_enable = _topic->clientid_enable;
memcpy(g_iot_topic.topic_pub, _topic->topic_pub, 64);
memcpy(g_iot_topic.topic_sub, _topic->topic_sub, 64);
free(mBuff);
g_sub_code_enable.net_enable = g_sub_code_enable.code_set & 0x01;
g_sub_code_enable.iot_enable = (g_sub_code_enable.code_set >> 1) & 0x01;
g_sub_code_enable.custom_enable = (g_sub_code_enable.code_set >> 2) & 0x01;
g_sub_code_enable.loop_enable = (g_sub_code_enable.code_set >> 3) & 0x01;
g_sub_code_enable.dgdus_enable = (g_sub_code_enable.code_set >> 4) & 0x01;
g_sub_code_enable.wbdus_enable = (g_sub_code_enable.code_set >> 5) & 0x01;
g_sub_code_enable.radar_enable = (g_sub_code_enable.code_set >> 6) & 0x01;
// g_sub_code_enable.laser_enable = (g_sub_code_enable.code_set >> 9) & 0x01;
// g_sub_code_enable.lora_enable = (g_sub_code_enable.code_set >> 15) & 0x01;
}
void output_cfg_from_flash(void)
{
// if(g_flag_debug)
// {
PRINT("\nBaud1:%d, Baud2:%d\n", g_storage_uart_baud, g_storage_uart_baud_2);
PRINT("\nGet Net config:\n");
PRINT("Local Net Config: "
" mac:%02X-%02X-%02X-%02X-%02X-%02X\n"
" ip:%d.%d.%d.%d\n"
" submask:%d.%d.%d.%d\n"
" gateway:%d.%d.%d.%d\n"
" dns:%d.%d.%d.%d\n"
" ssc_port tcp: %d, udp:%d, udp_msg:%d\n"
" dev_port tcp: %d, udp:%d\n",
local_net_cfg.mac[0],local_net_cfg.mac[1],local_net_cfg.mac[2],local_net_cfg.mac[3],local_net_cfg.mac[4],local_net_cfg.mac[5],
local_net_cfg.lip[0],local_net_cfg.lip[1],local_net_cfg.lip[2],local_net_cfg.lip[3],
local_net_cfg.sub[0],local_net_cfg.sub[1],local_net_cfg.sub[2],local_net_cfg.sub[3],
local_net_cfg.gw[0],local_net_cfg.gw[1],local_net_cfg.gw[2],local_net_cfg.gw[3],
local_net_cfg.dns[0],local_net_cfg.dns[1],local_net_cfg.dns[2],local_net_cfg.dns[3],
local_net_cfg.port_ssc_tcp, local_net_cfg.port_ssc_udp, local_net_cfg.port_ssc_udp_message,
local_net_cfg.port_dev_tcp, local_net_cfg.port_dev_udp
);
PRINT("Net Center Config:\n");
PRINT(
" lssc_ip:%d.%d.%d.%d\n"
" msg_port:%d, tcp_port:%d, udp_port:%d, sw_ver:%d.%d\n",
net_center_info.lssc_ip[0], net_center_info.lssc_ip[1], net_center_info.lssc_ip[2], net_center_info.lssc_ip[3],
net_center_info.msg_port, net_center_info.tcp_port, net_center_info.udp_port,
net_center_info.sw_ver[0], net_center_info.sw_ver[1]);
PRINT("Iot Net Config:\n");
PRINT(
" remote_addr:%s\n"
" mqtt_port:%d, client_id:%s\n"
" username:%s\n"
" password:%s\n"
" mode:%d\n\n",
iot_net_info.remote_addr, iot_net_info.mqtt_port, iot_net_info.client_id,
iot_net_info.username, iot_net_info.password, iot_net_info.mode);
PRINT("Iot Topic Config:\n");
PRINT(
" clientid_enable:%d\n"
" topic_pub:%s\n"
" topic_sub:%s\n",
g_iot_topic.clientid_enable, g_iot_topic.topic_pub, g_iot_topic.topic_sub);
// }
}
// g_sub_code_enable.code_set get ready first.
void update_sub_code_enable(void)
{
uint32_t _offset = 0;
uint16_t len = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
PRINT("Err_When_malloc__\n");
free(mBuff);
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
_offset = DEV_SUB_CODE_ADDR_OFFSET;
memcpy(&mBuff[_offset], &(g_sub_code_enable.code_set), sizeof(g_sub_code_enable.code_set));
SPI_Flash_Write(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
free(mBuff);
}
//
void alter_dev_serila(uint8_t *serial)
{
uint32_t _offset = 0;
uint16_t len = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
memcpy(&mBuff[DEV_NUMER_ADDR_OFFSET], serial, 6);
SPI_Flash_Write(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
free(mBuff);
}
void alter_dev_baud(uint8_t *baudbuf)
{
uint32_t _offset = 0;
uint8_t *mBuff = (uint8_t *)malloc(CFG_FLASH_BLOCK_SIZE);
if(mBuff == NULL)
{
return;
}
memset(mBuff, 0, CFG_FLASH_BLOCK_SIZE);
SPI_Flash_Read(mBuff, DEV_CNG_ADDR_BASE, CFG_FLASH_BLOCK_SIZE);
memcpy(&mBuff[DEV_BUS_BAUD_ADDR_OFFSET], baudbuf, 8);
free(mBuff);
}