Browse Source

update(applications):取消每次板卡连接网络失败后的复位策略,采用断开重连,超过5次失败判定才进行板卡复位配置,同时每次连接时检查信号强度并上传

dev-rebuild
jujihjuji 5 months ago
parent
commit
3cc29b5bce
  1. 103
      applications/VK_Client.c
  2. 4
      applications/drv_ec800k.c
  3. 12
      applications/drv_ec800k.h

103
applications/VK_Client.c

@ -17,8 +17,8 @@ char cmd_str[100] = {0};
void client_tcp_close(Cclient_t *client) {
sprintf(cmd_str, AT_QICLOSE, client->connect_ID);
BSP_LTE_SendCmd(cmd_str, DEFAULT_EXPECT, DEFAULT_ERROR, LTE_CMD_WAIT_NORMAL);
client->connect_sta = false;
client->error_cnt = 0;
// client->connect_sta = false;
// client->error_cnt = 0;
}
/*将EC800K软件复位*/
@ -85,52 +85,55 @@ int16_t client_tcp_connect(Cclient_t *client) {
if (lte_dev.config_sta == false) return rtn;
if (client->connect_sta == true) return rtn;
/*查询PDP场景*/
if (0 != BSP_LTE_SendCmd(AT_QIACT, "+QIACT: 1,1,1,", DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG)) {
/*如果查询PDP场景未设置成功,则激活PDP场景模式*/
if (0 != BSP_LTE_SendCmd(AT_QIACT1, DEFAULT_EXPECT, DEFAULT_ERROR,
if (lte_dev.reset_flag == DTU_CF_NEED_RESET) {
/*查询PDP场景*/
if (0 != BSP_LTE_SendCmd(AT_QIACT, "+QIACT: 1,1,1,", DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG)) {
BSP_LTE_SendCmd(AT_QIDEACT, NETCLOSE_SUCCESS, NETCLOSE_FAILURE,
LTE_CMD_WAIT_LLONG);
client->error_cnt++;
return -1;
/*如果查询PDP场景未设置成功,则激活PDP场景模式*/
if (0 != BSP_LTE_SendCmd(AT_QIACT1, DEFAULT_EXPECT, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG)) {
BSP_LTE_SendCmd(AT_QIDEACT, NETCLOSE_SUCCESS, NETCLOSE_FAILURE,
LTE_CMD_WAIT_LLONG);
//client->error_cnt++;
return -1;
}
}
}
//
BSP_LTE_SendCmd(AT_CFG_TRANS_SIZE, DEFAULT_EXPECT, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG);
BSP_LTE_SendCmd(AT_CFG_TRANS_WAITTM, DEFAULT_EXPECT, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG);
//
//
BSP_LTE_SendCmd(AT_CFG_TRANS_SIZE, DEFAULT_EXPECT, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG);
BSP_LTE_SendCmd(AT_CFG_TRANS_WAITTM, DEFAULT_EXPECT, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG);
//
}
// 1. 检查网络信号
lte_dev.csq = BSP_LTE_GetCSQ();
// 2, 打开链接
memset(cmd_cmd, 0, sizeof(cmd_cmd));
memset(cmd_str, 0, sizeof(cmd_str));
sprintf(cmd_cmd, AT_QIOPEN_TRANS /*AT_QIOPEN_FORW*/, client->connect_ID,
client->mode, client->ip, client->port);
sprintf(cmd_str, "+QIOPEN: %d,0", client->connect_ID);
/*打开socket, 这个模块他不返回+QIOPEN:字符串*/
if (0 != BSP_LTE_SendCmd(cmd_cmd, CONNECTE_OK, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG) &&
0 != BSP_LTE_SendCmd(cmd_cmd, cmd_str, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG)) {
if (strstr((char *)lte_dev.at_buf,
"563")) // Socket标识被占用 **应该是已经建立连接了
client_tcp_close(client);
client->connect_sta = false;
while (0 != BSP_LTE_SendCmd(cmd_cmd, CONNECTE_OK, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG) &&
0 != BSP_LTE_SendCmd(cmd_cmd, cmd_str, DEFAULT_ERROR,
LTE_CMD_WAIT_LLONG)) {
client_tcp_close(client);
client->error_cnt++;
EC800K_Reset();
return 0;
} else {
client->connect_sta = true;
client->error_cnt = 0;
if (client->error_cnt > 5) {
EC800K_Reset();
client->error_cnt = 0;
lte_dev.reset_flag = DTU_CF_NEED_RESET;
return 0;
}
}
client->connect_sta = true;
client->error_cnt = 0;
lte_dev.reset_flag = DTU_CF_NO_NEED_RESET;
rt_kprintf("%s\r", lte_dev.at_buf);
#ifdef TRANSPARENT_MODE
@ -139,14 +142,16 @@ int16_t client_tcp_connect(Cclient_t *client) {
#ifdef LINK_4G
char buf[128] = {0};
sprintf(buf, "{\"sn\":\"%s\",\"client_id\":\"%s\"}\r\n", lte_dev.iccid,
lte_dev.imei);
sprintf(buf, "{\"sn\":\"%s\",\"client_id\":\"%s\",\"csq\":\"%d\"}\r\n", lte_dev.iccid,
lte_dev.imei,lte_dev.csq);
rt_device_write(lte_dev.com_dev, 0, buf, sizeof(buf));
rt_device_write(lte_dev.com_dev, 0, buf, sizeof(buf));
rt_device_write(lte_dev.com_dev, 0, buf, sizeof(buf));
hw_printf(buf);
#endif
return rtn;
@ -157,22 +162,22 @@ int16_t client_yield(CLte_dev_t *pLte_dev) {
int16_t rtn = 0;
while (1) {
if (lte_dev.client1->connect_sta == true) {
rt_err_t ret = rt_sem_take(lte_dev.com_dev_rx_sem, 1000);
if (pLte_dev->client1->connect_sta == true) {
rt_err_t ret = rt_sem_take(pLte_dev->com_dev_rx_sem, 1000);
if (rt_tick_get() - last_rx_tick > RT_TICK_PER_SECOND * 10) {
rt_kprintf("timeout!!! reconnect.");
hw_printf("timeout!!! reconnect.");
rt_kprintf("timeout!!! reconnect.\n");
hw_printf("timeout!!! reconnect.\n");
pLte_dev->client1->connect_sta = false;
}
if (RT_EOK == ret) {
rt_ssize_t len = 0;
while (1) {
rt_memset(lte_dev.at_buf, 0, sizeof(lte_dev.at_buf));
len = rt_device_read(lte_dev.com_dev, 0, lte_dev.at_buf,
sizeof(lte_dev.at_buf));
rt_memset(pLte_dev->at_buf, 0, sizeof(pLte_dev->at_buf));
len = rt_device_read(pLte_dev->com_dev, 0, pLte_dev->at_buf,
sizeof(pLte_dev->at_buf));
if (len > 0) {
/*收到TCP关闭的消息*/
if (strstr((const char *)lte_dev.at_buf, CLOSED)) {
if (strstr((const char *)pLte_dev->at_buf, CLOSED)) {
memset(cmd_str, 0, sizeof(cmd_str));
sprintf(cmd_str, "\"closed\",%d", pLte_dev->client1->connect_ID);
if (NULL != strstr((char *)lte_dev.at_buf, cmd_str)) {
@ -182,8 +187,8 @@ int16_t client_yield(CLte_dev_t *pLte_dev) {
}
break;
} else if (strstr((const char *)lte_dev.at_buf, "NO CARRIER")) {
rt_kprintf("disconnect!!!");
hw_printf("disconnect!!!");
rt_kprintf("disconnect!!!\n");
hw_printf("disconnect!!!\n");
pLte_dev->client1->connect_sta = false;
break;
}
@ -200,8 +205,10 @@ int16_t client_yield(CLte_dev_t *pLte_dev) {
}
} else {
BSP_LTE_Config();
client_tcp_connect(lte_dev.client1);
if(pLte_dev->reset_flag == DTU_CF_NEED_RESET){
BSP_LTE_Config();
}
client_tcp_connect(pLte_dev->client1);
last_rx_tick = rt_tick_get();
}
}

4
applications/drv_ec800k.c

@ -37,6 +37,8 @@ CLte_dev_t lte_dev = {
.contextID = 1,
.deviceEnable = true,
.client1 = (Cclient_t *)&client1,
.config_sta = false,
.reset_flag = DTU_CF_NEED_RESET,
};
void BSP_LTE_SendData(uint8_t *pdata, uint32_t length) {
@ -244,7 +246,7 @@ void BSP_LTE_Config(void) {
uint8_t c = 0;
rt_thread_mdelay(3000);
//rt_thread_mdelay(3000);
BSP_LTE_SendData((uint8_t *)"+++", 3);
rt_thread_mdelay(2000);
BSP_LTE_SendData((uint8_t *)"+++", 3);

12
applications/drv_ec800k.h

@ -227,7 +227,7 @@ typedef struct {
char iccid[32];
uint8_t eps_sta;
uint8_t csq;
int8_t csq;
uint8_t contextID; // 场景ID。范围:1~15。
bool config_sta;
@ -242,9 +242,17 @@ typedef struct {
rt_thread_t tid1;
rt_thread_t tid2;
bool reset_flag;
} CLte_dev_t;
extern CLte_dev_t lte_dev;
enum {
DTU_CF_NO_NEED_RESET = 0,
DTU_CF_NEED_RESET = 1,
};
//////////////////////////////////////////////////////////////////////////////////////////
bool isICCIDValid(char *str);
@ -273,6 +281,8 @@ void BSP_LTE_GetICCID(char *pICCID);
int16_t BSP_LTE_GetBsInfo(int *lte_mcc, int *lte_mnc, int *lte_lac,
int *lte_cellid);
int BSP_LTE_GetCSQ(void);
uint32_t BSP_LTE_GetTimeMs(void);
int16_t BSP_LTE_GetGTPOS_GET(int *lon, int *lat);

Loading…
Cancel
Save