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 完整源码
This commit is contained in:
wangfq
2026-06-25 16:21:57 +08:00
parent 6fd4e564e3
commit 95808f9f25
966 changed files with 406958 additions and 84 deletions

View File

@@ -0,0 +1,922 @@
/*
* dbn_ble_srv.c
*
* Created on: Aug 27, 2024
* Author: Thinkpad
*/
#include "dbn_ble_srv.h"
#include "cmcng.h"
#include "storage.h"
#include <string.h>
#include "net_srv.h"
uint8_t g_flag_notify_temp = 0; //临时通知notify flag, 0 disable, 1 enable
BLE_Notify_Buf g_notify_buftemp = {0,0, ""};
BLE_Notify_Buf g_ble_rcv_buf = {0,0, ""};
BLE_Notify_Buf g_tmp_report_buf = {0,0, ""};
Buf_DBN_BLE g_buf_ble_response = {0,0,0,0,0,0,0,""};
DBN_BLE_State g_dbn_ble_state_acs_enable = {0};
uint8_t tmp_ble_buf[MAX_BLE_TMP_BUF_LEN] = "";
extern uint8_t loop1_FLAG_CUT;
void clear_ble_notify_buf(BLE_Notify_Buf * buf)
{
buf->len = 0;
buf->flag = 0;
memset(buf, 0, MAX_BLE_Notify_Buf_LEN);
}
void clear_buf_dbn_ble(Buf_DBN_BLE * buf)
{
uint8_t i = 0;
buf->flag = 0;
buf->magic = 0;
buf->cmd = 0;
memset(buf->dat, 0, buf->dat_len);
buf->dat_len = 0;
buf->dat_offset = 0;
buf->pkg_amount = 0;
buf->pkg_seq = 0;
}
void clear_buf_dbn_ble_all(Buf_DBN_BLE * buf)
{
uint8_t i = 0;
// if(g_flag_debug)
{
// PRINT("\nclear_buf_dbn_ble_flag:%02X,magic:%02X,pkg_amount:%02X,seq:%02X,cmd:%02X, dat_len:%d,offset:%d\n",
// buf->flag,buf->magic,buf->pkg_amount, buf->pkg_seq,buf->cmd, buf->dat_len,buf->dat_offset);
// for(i = 0; i < buf->dat_len; i++)
// {
// PRINT(" %02X", buf->dat[i]);
// }
// PRINT("\n");
}
buf->flag = 0;
buf->magic = 0;
buf->cmd = 0;
memset(buf->dat, 0, MAX_BLE_BUF_LEN);
buf->dat_len = 0;
buf->dat_offset = 0;
buf->pkg_amount = 0;
buf->pkg_seq = 0;
}
// 0: 包检测异常
//检测包是否完整Magic Byte, Header Byte, CK Byte, 校验字节(异或校验,以及和校验)
uint8_t check_pkg(uint8_t * pkg, uint8_t len)
{
if(len < 6) //min length of ble pkg is 6
return 0;
uint8_t magic = pkg[0];
uint8_t _len = pkg[2]; //data_len
if(magic == 0x9F){
// if(_len + 4 < len){
// return 0;
// }
if(pkg[1] == 0x01 && pkg[2] == 0x00 && pkg[3] == 0x01 && pkg[4] == 0xA5 && pkg[5] == 0xA7){
g_flag_counter_ota.tick = 0;
g_flag_counter_ota.flag = 1;
PRINT("Come into OTA___\n");
}
}
if(_len + 5 < len)
{
return 0;
}
uint8_t _dxor = 0;
uint8_t _dsum = 0;
uint8_t _cklen = _len + 3; //不计算 校验字节
uint8_t i = 0;
for(i = 1; i < _cklen; i++)
{
_dxor ^= pkg[i];
_dsum += pkg[i];
}
if((_dxor != pkg[_cklen]) || (_dsum != pkg[_cklen+1]))
{
// if(g_flag_debug)
// {
// PRINT("_dxor:0x%02X - 0x%02X, _dsum:0x%02X - 0x%02X\r\n", _dxor, pkg[_cklen], _dsum, pkg[_cklen + 1] );
// }
return 0;
}
return magic;
}
static uint8_t set_dev_info_to_ready(uint8_t *dat_dst)
{
uint8_t i = 0, j = 0;
for(i = 0; i < 6; i++)
{
dat_dst[i] = gMacAddr[i];
// PRINT(" %02X",dat_dst[i] );
}
// memcpy(dat_dst, MACAddr, sizeof(MACAddr));
// i += sizeof(MACAddr);
dat_dst[i++] = HARDWARE_VER_MAIN;
dat_dst[i++] = HARDWARE_VER_SUB;
dat_dst[i++] = FIRMWARE_VER_MAIN;
dat_dst[i++] = FIRMWARE_VER_SUB;
// Dev Model
dat_dst[i++] = strlen(PRODUCT_MODEL);
memcpy(&dat_dst[i], PRODUCT_MODEL, strlen(PRODUCT_MODEL));
i += strlen(PRODUCT_MODEL);
// Dev Number
for(j = 0; j < 6; j++, i++)
{
dat_dst[i] = g_dev_number[j];
}
// sub_code
// memcpy(&dat_dst[i], &(g_sub_code_enable.code_set), sizeof(g_sub_code_enable.code_set));
// i += sizeof(g_sub_code_enable.code_set);
dat_dst[i++] = 0;
dat_dst[i++] = 0;
dat_dst[i++] = 0; // g_bus_dus_amount_stored.bus1_amount;
dat_dst[i++] = 0; //g_bus_dus_amount_stored.bus2_amount;
return i;
}
static uint8_t set_net_info_to_ready(uint8_t * dat_dst)
{
uint8_t i = 0;
memcpy(&dat_dst[i], local_net_cfg.lip, 4);
i += 4;
memcpy(&dat_dst[i], local_net_cfg.sub, 4);
i += 4;
memcpy(&dat_dst[i], local_net_cfg.gw, 4);
i += 4;
memcpy(&dat_dst[i], net_center_info.lssc_ip, 4);
i += 4;
memcpy(&dat_dst[i], local_net_cfg.dns, 4);
i += 4;
dat_dst[i++] = local_net_cfg.port_ssc_tcp;
dat_dst[i++] = local_net_cfg.port_ssc_tcp >> 8;
dat_dst[i++] = local_net_cfg.port_ssc_udp;
dat_dst[i++] = local_net_cfg.port_ssc_udp >> 8;
dat_dst[i++] = local_net_cfg.port_ssc_udp_message;
dat_dst[i++] = local_net_cfg.port_ssc_udp_message >> 8;
dat_dst[i++] = local_net_cfg.port_dev_tcp;
dat_dst[i++] = local_net_cfg.port_dev_tcp >> 8;
dat_dst[i++] = local_net_cfg.port_dev_udp;
dat_dst[i++] = local_net_cfg.port_dev_udp >> 8;
return i;
}
void set_response_iot_net(Buf_DBN_BLE *response_dst)
{ // config iot_net
uint8_t ret = 0;
uint8_t i = 0;
int _len = 0;
clear_buf_dbn_ble(response_dst);
response_dst->magic = MAGIC_BYTE_DBN_DEFAULT;
response_dst->cmd = CMD_DBN_GET_IOT_NET;
memcpy(response_dst->dat, iot_net_info.remote_addr, strlen(iot_net_info.remote_addr));
i += strlen(iot_net_info.remote_addr);
i++;
_len = sprintf(&(response_dst->dat[i]), "%d", iot_net_info.mqtt_port);
i += _len;
i++;
memcpy(&(response_dst->dat[i]), iot_net_info.client_id, strlen(iot_net_info.client_id));
i += strlen(iot_net_info.client_id);
i++;
memcpy(&(response_dst->dat[i]), iot_net_info.username, strlen(iot_net_info.username));
i += strlen(iot_net_info.username);
i++;
memcpy(&(response_dst->dat[i]), iot_net_info.password, strlen(iot_net_info.password));
i += strlen(iot_net_info.password);
response_dst->dat_len = i;
response_dst->pkg_amount = i / MAX_BLE_DAT_RESPONSE_LEN;
if((i % MAX_BLE_DAT_RESPONSE_LEN) > 0)
{
response_dst->pkg_amount += 1;
}
response_dst->pkg_seq = 0;
response_dst->flag = 1;
}
void set_response_iot_topic(Buf_DBN_BLE *response_dst)
{ //config iot_topic
uint8_t ret = 0;
uint8_t i = 0;
int _len = 0;
clear_buf_dbn_ble(response_dst);
response_dst->magic = MAGIC_BYTE_DBN_DEFAULT;
response_dst->cmd = CMD_DBN_GET_IOT_TOPIC;
response_dst->dat[0] = g_iot_topic.clientid_enable + 0x30;
i++;
i++;
memcpy(&(response_dst->dat[i]), g_iot_topic.topic_pub, strlen(g_iot_topic.topic_pub));
i += strlen(g_iot_topic.topic_pub);
i++;
memcpy(&(response_dst->dat[i]), g_iot_topic.topic_sub, strlen(g_iot_topic.topic_sub));
i += strlen(g_iot_topic.topic_sub);
response_dst->dat_len = i;
response_dst->pkg_amount = i / MAX_BLE_DAT_RESPONSE_LEN;
if((i % MAX_BLE_DAT_RESPONSE_LEN) > 0)
{
response_dst->pkg_amount += 1;
}
response_dst->pkg_seq = 0;
response_dst->flag = 1;
}
uint8_t set_response_buf(Buf_DBN_BLE *response_dst, uint8_t magic, uint8_t cmd, uint8_t * dat, uint8_t dat_len)
{
uint8_t ret = 0;
uint8_t i = 0;
clear_buf_dbn_ble(response_dst);
response_dst->magic = magic;
response_dst->cmd = cmd;
uint8_t _amount = dat_len / MAX_BLE_DAT_RESPONSE_LEN;
if((dat_len % MAX_BLE_DAT_RESPONSE_LEN) > 0)
{
_amount++;
}
response_dst->pkg_amount = _amount;
response_dst->pkg_seq = 0;
response_dst->dat_len = dat_len;
for(i = 0; i < dat_len; i++)
{
response_dst->dat[i] = dat[i];
}
response_dst->flag = 1;
return ret;
}
uint16_t compute_ckb(uint8_t header_0, uint8_t header_1, uint8_t header_cmd, uint8_t *dat, uint8_t dat_len)
{
uint16_t ret = 0;
uint8_t i = 0;
uint8_t _dxor = header_0 ^ header_1 ^ header_cmd;
uint8_t _dsum = header_0 + header_1 + header_cmd;
for(i = 0; i < dat_len; i++)
{
_dxor ^= dat[i];
_dsum += dat[i];
}
ret = _dxor;
ret = (ret << 8) + (_dsum % 0x100);
return ret;
}
uint8_t set_response_tran_to_notify(uint8_t *dat_ori, uint8_t dat_len, BLE_Notify_Buf * notify_dst)
{
uint8_t ret = 0;
uint8_t i = 0;
if(g_flag_bt_state == 0){
return ret;
}
if(notify_dst->flag)
{ //dst not idle
return ret;
}
if(dat_len < 6)
{
return ret;
}
for(i = 0; i < dat_len; i++)
{
notify_dst->buf[i] = dat_ori[i];
}
notify_dst->len = dat_len;
notify_dst->flag = 1;
}
//response_ori must set_response_buf first
uint8_t set_response_to_notify(Buf_DBN_BLE *response_ori, BLE_Notify_Buf * notify_dst)
{
uint8_t ret = 0;
uint8_t i = 0;
uint16_t _ckbl = 0;
if(notify_dst->flag)
{ //dst not idle
return ret;
}
if(response_ori->flag == 0)
{ //ori idle
return ret;
}
if(response_ori->pkg_amount <= 1)
{
//没有分包的情况
notify_dst->buf[0] = response_ori->magic;
if(response_ori->magic == MAGIC_BYTE_DBN_TRANSPARENT)
{
notify_dst->buf[1] = response_ori->pkg_seq;
}
else
{
notify_dst->buf[1] = 0;
}
notify_dst->buf[2] = response_ori->dat_len + 1; // 1 is cmd_byte
notify_dst->buf[3] = response_ori->cmd;
_ckbl = compute_ckb(notify_dst->buf[1], notify_dst->buf[2], notify_dst->buf[3], response_ori->dat, response_ori->dat_len);
for(i = 0; i < response_ori->dat_len; i++)
{
notify_dst->buf[i + 4] = response_ori->dat[i];
}
notify_dst->buf[i + 4] = (uint8_t)(_ckbl >> 8);
i++;
notify_dst->buf[i + 4] = (uint8_t)(_ckbl);
i++;
notify_dst->len = i + 4;
// if(g_flag_debug)
// {
// PRINT("set_response_to_notify_dst__\n");
// for(i = 0; i < notify_dst->len; i++)
// {
// PRINT(" %02X", notify_dst->buf[i]);
// }
// }
notify_dst->flag = 1;
clear_buf_dbn_ble(response_ori);
return 1;
}
else
{
notify_dst->buf[0] = response_ori->magic;
uint8_t _pkg_amount = response_ori->pkg_amount;
uint8_t _pkg_seq = response_ori->pkg_seq;
uint8_t _remain_len = response_ori->dat_len - response_ori->dat_offset;
if(_remain_len > MAX_BLE_DAT_RESPONSE_LEN)
{
_remain_len = MAX_BLE_DAT_RESPONSE_LEN;
}
_pkg_seq += 1;
notify_dst->buf[1] = (_pkg_amount << 4)|(_pkg_seq);
notify_dst->buf[2] = _remain_len + 1; // 1 is cmd_byte
notify_dst->buf[3] = response_ori->cmd;
_ckbl = compute_ckb(notify_dst->buf[1], notify_dst->buf[2], notify_dst->buf[3],
&(response_ori->dat[response_ori->dat_offset]), _remain_len);
for(i = 0; i < _remain_len; i++)
{
notify_dst->buf[i + 4] = response_ori->dat[response_ori->dat_offset + i];
}
notify_dst->buf[i + 4] = (uint8_t)(_ckbl >> 8);
i++;
notify_dst->buf[i + 4] = (uint8_t)(_ckbl);
i++;
response_ori->dat_offset += _remain_len;
response_ori->pkg_seq += 1;
notify_dst->len = i + 4;
// if(g_flag_debug)
// {
// PRINT("\nset_notify_dst,amount:%d,seq:%d,offset:%d\n", response_ori->pkg_amount,response_ori->pkg_seq, response_ori->dat_offset);
// for(i = 0; i < notify_dst->len; i++)
// {
// PRINT(" %02X", notify_dst->buf[i]);
// }
// PRINT("\n");
// }
notify_dst->flag = 1;
if(response_ori->pkg_amount == response_ori->pkg_seq)
{
clear_buf_dbn_ble(response_ori);
}
return 1;
}
}
static uint8_t unpack_packs(uint8_t *pkg, uint8_t len)
{
static uint8_t _offset = 0;
uint8_t _header_0 = pkg[1];
uint8_t _header_0_high = _header_0 >> 4;
uint8_t _header_0_low = _header_0 % 0x10;
uint8_t _len = pkg[2];
uint8_t _cmd = pkg[3];
uint8_t i = 0, j = 0, k = 0;
uint8_t _amount = 0;
if(_header_0_high)
{
if(_header_0_low == 1)
{
g_buf_ble_response.magic = pkg[0];
g_buf_ble_response.pkg_amount = _header_0_high;
g_buf_ble_response.pkg_seq = _header_0_low;
g_buf_ble_response.cmd = _cmd;
memcpy(&g_buf_ble_response.dat, &pkg[4], _len - 1);
_offset = _len - 1;
g_buf_ble_response.dat_len = _len - 1;
}
else
{
if((g_buf_ble_response.pkg_amount != _header_0_high) || (g_buf_ble_response.cmd != _cmd))
{
//printf("\nNot_the_right_sub_pack!\n");
clear_buf_dbn_ble_all(&g_buf_ble_response);
return 0;
}
if(g_buf_ble_response.pkg_seq != (_header_0_low -1))
{
//printf("\nNot_the_right_sub_pack!!\n");
clear_buf_dbn_ble_all(&g_buf_ble_response);
return 0;
}
g_buf_ble_response.pkg_seq = _header_0_low;
g_buf_ble_response.dat_len += (_len - 1); // not include cmd_byte
memcpy(&g_buf_ble_response.dat[_offset], &pkg[4], _len - 1);
_offset += (_len - 1);
}
}
else
{
clear_buf_dbn_ble(&g_buf_ble_response);
g_buf_ble_response.magic = pkg[0];
g_buf_ble_response.pkg_amount = 1;
g_buf_ble_response.pkg_seq = 0;
g_buf_ble_response.cmd = _cmd;
g_buf_ble_response.dat_len = (_len - 1);
memcpy(g_buf_ble_response.dat, &pkg[4], _len - 1);
}
if(_header_0_high == _header_0_low)
{
// received end.
// if(g_flag_debug)
// {
// printf("\nReceive_pack_over:\n");
// for(i = 0; i < g_buf_ble_response.dat_len; i++)
// {
// printf(" %02X", g_buf_ble_response.dat[i]);
// }
// printf("\nEnd\n");
// }
if(g_buf_ble_response.cmd == CMD_DBN_CHECK_PASS)
{
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
if(g_buf_ble_response.dat_len != 6)
{
//response pass failed
tmp_ble_buf[0] = 0x01;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
}
else
{
char _pass = check_ble_safe_pass(g_buf_ble_response.dat);
if(_pass)
{
//response ok
tmp_ble_buf[0] = 0x0;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
}
else
{
//response failed
tmp_ble_buf[0] = 0x01;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
}
}
} //end if g_buf_ble_response.cmd == CMD_DBN_CHECK_PASS
else if(g_buf_ble_response.cmd == CMD_DBN_MODIFY_PASS)
{
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
if(g_buf_ble_response.dat_len != 12)
{
//response failed
tmp_ble_buf[0] = 0x01;
}
else
{
char _pass = check_ble_safe_pass(g_buf_ble_response.dat);
if(_pass)
{
//response ok
set_ble_safe_pass(&g_buf_ble_response.dat[6]);
tmp_ble_buf[0] = 0x00;
}
else
{
//response failed
tmp_ble_buf[0] = 0x01;
}
}
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
} //end if g_buf_ble_response.cmd == CMD_DBN_MODIFY_PASS
else if(g_buf_ble_response.cmd == CMD_DBN_SET_IOT_NET)
{
for(i = 0, j = 0, k = 0; i < g_buf_ble_response.dat_len; i++)
{
if(g_buf_ble_response.dat[i] == 0x00)
{
j++;
if(k == 0)
{
//iot _host
PRINT("Rcv_Host:%s\n", tmp_ble_buf);
memcpy(iot_net_info.remote_addr, tmp_ble_buf, j);
}
else if(k == 1)
{
PRINT("Rcv_Port:%s\n", tmp_ble_buf);
uint16_t _port = 0;
for(j = 0; j < strlen(tmp_ble_buf); j++)
{
_port *= 10;
_port += tmp_ble_buf[j] - 0x30;
}
iot_net_info.mqtt_port = _port;
}
else if(k == 2)
{
PRINT("Rcv_Client:%s\n", tmp_ble_buf);
if((strlen(tmp_ble_buf) == 1) && (tmp_ble_buf[0] == 0x20))
{
PRINT("Client_use local_serial\n");
}
else
{
memcpy(iot_net_info.client_id, tmp_ble_buf, j);
}
}
else if(k == 3)
{
PRINT("Rcv_Username:%s\n", tmp_ble_buf);
memcpy(iot_net_info.username, tmp_ble_buf, j);
}
else if(k == 4)
{
PRINT("Rcv_Pass:%s\n", tmp_ble_buf);
memcpy(iot_net_info.password, tmp_ble_buf, j);
}
k++;
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
j = 0;
}
else
{
tmp_ble_buf[j] = g_buf_ble_response.dat[i];
j++;
}
}
if(k == 4)
{
PRINT("Rcv_Pass:%s\n", tmp_ble_buf);
memcpy(iot_net_info.password, tmp_ble_buf, strlen(tmp_ble_buf) + 1);
}
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
write_net_config(&local_net_cfg, &net_center_info, &iot_net_info, &g_iot_topic);
// response finally
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
//clear_buf_dbn_ble_all(&g_buf_ble_response);
} //end if CMD_DBN_SET_IOT_NET
else if(g_buf_ble_response.cmd == CMD_DBN_SET_IOT_TOPIC)
{
for(i = 0, j = 0, k = 0; i < g_buf_ble_response.dat_len; i++)
{
if(g_buf_ble_response.dat[i] == 0x00)
{
//j++;
if(k == 0)
{
g_iot_topic.clientid_enable = tmp_ble_buf[0] - 0x30;
}
else if(k == 1)
{
// if(g_flag_debug)
// {
// printf("rcv_topic_pub_:%s\n", tmp_ble_buf);
// for(f = 0; f < j; f++)
// {
// printf(" %02X", tmp_ble_buf[f]);
// }
// printf(", j:%d\n", j);
// }
memset(g_iot_topic.topic_pub, 0, MAX_TOPIC_LENGTH);
memcpy(g_iot_topic.topic_pub, tmp_ble_buf, j + 1);
}
k++;
j = 0;
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
}
else
{
tmp_ble_buf[j] = g_buf_ble_response.dat[i];
j++;
}
}
if(k == 2)
{
// if(g_flag_debug)
// {
// printf("rcv_topic_sub_:%s\n", tmp_ble_buf);
// }
memset(g_iot_topic.topic_sub, 0, MAX_TOPIC_LENGTH);
memcpy(g_iot_topic.topic_sub, tmp_ble_buf, strlen(tmp_ble_buf) + 1);
}
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
write_net_config(&local_net_cfg, &net_center_info, &iot_net_info, &g_iot_topic);
// response finally
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
} // end if CMD_DBN_SET_IOT_TOPIC
}
return 0;
}
void manage_dbn_ble_default(uint8_t *pkg, uint8_t len)
{
uint8_t _header_0 = pkg[1];
uint8_t _header_0_high = 0;
uint8_t _header_0_low = _header_0 % 0x10;
uint8_t _len = pkg[2];
uint8_t _cmd = pkg[3];
uint8_t _tmp = 0;
uint8_t i = 0, k = 0;
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
switch(_cmd)
{
case CMD_DBN_GET_DEV_INFO:
{
i = set_dev_info_to_ready(tmp_ble_buf);
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i);
// printf("\nGet_dev_info\n");
} break;
case CMD_DBN_SET_LSSC_NET:
{
//printf("Set_Net_info_len:%d\n", len);
if(len < 34)
{
return;
}
i = 4;
memcpy(local_net_cfg.lip, &pkg[i], 4);
i += 4;
memcpy(local_net_cfg.sub, &pkg[i], 4);
i += 4;
memcpy(local_net_cfg.gw, &pkg[i], 4);
i += 4;
memcpy(net_center_info.lssc_ip, &pkg[i], 4);
//i += 4;
//printf("Reset_lip:%d\n",local_net_cfg.lip[3]);
i = 24;
//printf("Reset_lport:%02X %02X\n",pkg[24], pkg[25]);
//memcpy(local_net_cfg.dns
// local_net_cfg.port_ssc_tcp = *(uint16_t *)(&pkg[24]); //TOOD: Will err, why?
local_net_cfg.port_ssc_tcp = (pkg[25] << 8) | pkg[24];// This is OK
i += 2;
// local_net_cfg.port_ssc_udp = *(uint16_t *)(&pkg[i]);
local_net_cfg.port_ssc_udp =(pkg[27] <<8 ) | pkg[26];
i += 2;
// local_net_cfg.port_ssc_udp_message = *(uint16_t *)(&pkg[i]);
local_net_cfg.port_ssc_udp_message = (pkg[29] << 8) | pkg[28];
i += 2;
// local_net_cfg.port_dev_tcp = *(uint16_t *)(&pkg[i]);
local_net_cfg.port_dev_tcp = (pkg[31] << 8) | pkg[30];
net_center_info.tcp_port = local_net_cfg.port_dev_tcp;
i += 2;
// local_net_cfg.port_dev_udp = *(uint16_t *)(&pkg[32]);
local_net_cfg.port_dev_udp = (pkg[33] << 8) | pkg[32];
//printf("Will_reset_net_param___\n");
write_net_config(&local_net_cfg, &net_center_info, &iot_net_info, &g_iot_topic);
//response
tmp_ble_buf[0] = 0;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
} break;
case CMD_DBN_GET_LSSC_NET:
{
i = set_net_info_to_ready(tmp_ble_buf);
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i);
// printf("Get_Net_Info\n");
} break;
case CMD_DBN_GET_IOT_NET:
{
set_response_iot_net(&g_buf_ble_response);
} break;
case CMD_DBN_SET_IOT_NET:
{
unpack_packs(pkg, len);
} break;
case CMD_DBN_SET_IOT_TOPIC:
{
unpack_packs(pkg, len);
} break;
case CMD_DBN_GET_IOT_TOPIC:
{
set_response_iot_topic(&g_buf_ble_response);
} break;
case CMD_DBN_RESET_DEV:
{
//Restart Dev
NVIC_SystemReset();
} break;
case CMD_DBN_CHECK_PASS:
{
unpack_packs(pkg, len);
} break;
case CMD_DBN_SET_CJQ_PARAM:
{
// PRINT("\nSet_Cjq_param\n");
// unpack_pkg_set_cjq_param(pkg, len);
tmp_ble_buf[0] = 0;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
// para_store_init();
} break;
case CMD_DBN_GET_CJQ_PARAM:
{
i = 0;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i);
// PRINT("\nGet_Cjq_param\n");
} break;
case CMD_DBN_LOOP_SENS_LIST: {
// PRINT("SENS_CNG: %02X\n", pkg[4]);
memset(tmp_ble_buf, 0, MAX_BLE_TMP_BUF_LEN);
} break;
case CMD_DBN_SET_FACTORY:
case CMD_DBN_SET_CJQ_FACTORY: {
// 出厂初始化
tmp_ble_buf[0] = 0;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
factory_dev_info();
Delay_Ms(10);
//TODO: 不整个设备复位,复位除了蓝牙的部分,即蓝牙正常,其他部分重新初始化
} break;
case CMD_DBN_RW_UART_BAUD:{ //
uint8_t _rw = pkg[4];
uint32_t _baud = 0;
i = 0;
tmp_ble_buf[i++] = _rw;
tmp_ble_buf[i++] = 0x01; //status
if(_rw == 0){// read baud
tmp_ble_buf[i++] = g_max_counter_bt_min; // Idle Ble timeout
tmp_ble_buf[i++] = (uint8_t)g_storage_uart_baud; //1 g_storage_uart_baud? 2 g_storage_uart_baud_2
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud >> 8);
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud >> 16);
tmp_ble_buf[i++] = 0x02;
tmp_ble_buf[i++] = (uint8_t)g_storage_uart_baud_2;
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud_2 >> 8);
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud_2 >> 16);
// 4BYte Reserved
}
else { // write baud
alter_dev_baud(&pkg[5]); //
g_storage_uart_num = pkg[5];
g_storage_uart_baud = pkg[6];
g_storage_uart_baud |= (uint16_t)(pkg[7] << 8) & 0xFF00;
g_storage_uart_baud |= (uint32_t)(pkg[8] << 16) & 0xFF0000;
tmp_ble_buf[i++] = g_storage_uart_baud;
tmp_ble_buf[i++] = (uint8_t)g_storage_uart_baud;
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud >> 8);
tmp_ble_buf[i++] = (uint8_t)(g_storage_uart_baud >> 16);
tmp_ble_buf[i++] = 0x00; tmp_ble_buf[i++] = 0x00; tmp_ble_buf[i++] = 0x00; tmp_ble_buf[i++] = 0x00; // 4BYte Reserved
}
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, i);
} break;
case CMD_DBN_UPDATE_DEV_SERIAL:
{
alter_dev_serila(&pkg[4]);
//response
tmp_ble_buf[0] = 1;
set_response_buf(&g_buf_ble_response, MAGIC_BYTE_DBN_DEFAULT, _cmd, tmp_ble_buf, 1);
} break;
case CMD_SENS_ACS_ENABLE: {
// 线圈动态
g_dbn_ble_state_acs_enable.enable = pkg[5];
if(g_dbn_ble_state_acs_enable.enable){
g_dbn_ble_state_acs_enable.interval = pkg[6] * 0x7F;
g_dbn_ble_state_acs_enable.timeout_min = pkg[7];
if(g_dbn_ble_state_acs_enable.timeout_min){
g_dbn_ble_state_acs_enable.counter = mstick();
g_dbn_ble_state_acs_enable.timeout_counter = g_dbn_ble_state_acs_enable.timeout_min * 60 * 100; // TODO: min --> ms
}
g_dbn_ble_state_acs_enable.flag = 1;
}
else{
g_dbn_ble_state_acs_enable.flag = 0;
}
PRINT("Rcv_acs_enable_flag: %d\n", g_dbn_ble_state_acs_enable.flag);
} break;
default:
{
} break;
}
}
void manage_dbn_ble_transparent(uint8_t *pkg, uint8_t len)
{
//
// transparent_485(pkg, len);
// UART1_SendString(pkg, len);
UART2_SendString(pkg, len);
}
void poll_dbn_ble(void)
{
uint8_t i = 0;
uint8_t magic = 0;
if(g_ble_rcv_buf.flag)
{
if(g_flag_debug && g_flag_counter_ota.flag == 0)
{
PRINT("profile ChangeCB CHAR1?..:%s, len:%d \n", g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
for(i = 0; i < g_ble_rcv_buf.len; i++)
{
PRINT(" %02X", g_ble_rcv_buf.buf[i]);
}
PRINT("\n");
}
if(g_flag_counter_ota.flag == 0){
magic = check_pkg(g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
}
// printf("_magic: %02X\n", magic);
if(g_flag_counter_ota.flag){
manage_dbn_ble_transparent(g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
}
else{
if(magic != 0)
{
if(magic == MAGIC_BYTE_DBN_DEFAULT)
{
manage_dbn_ble_default(g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
}
else if (magic == MAGIC_BYTE_DBN_TRANSPARENT)
{
manage_dbn_ble_transparent(g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
}
}
}
// memcpy(g_notify_buftemp.buf, g_ble_rcv_buf.buf, g_ble_rcv_buf.len);
// g_notify_buftemp.len = g_ble_rcv_buf.len;
// g_flag_notify_temp = 1;
clear_ble_notify_buf(&g_ble_rcv_buf);
}
if(g_notify_buftemp.flag == 0)
{
// report_sens_acs();
g_flag_notify_temp = set_response_to_notify(&g_buf_ble_response, &g_notify_buftemp);
}
}