mirror of
https://gitee.com/moluo-tech/AT-Command
synced 2025-06-17 16:07:52 +00:00
1.解决未清除URC计数器导致频繁打印接收超时的问题
2.增加URC演示程序
This commit is contained in:
parent
3d482232c8
commit
93c7ab71ff
@ -10,6 +10,7 @@
|
|||||||
* 2020-01-02 Morro 初版
|
* 2020-01-02 Morro 初版
|
||||||
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
||||||
* 调通单行命令、多行命令、自定义命令等接口
|
* 调通单行命令、多行命令、自定义命令等接口
|
||||||
|
* 2021-03-03 Morro 解决未清除URC计数器导致频繁打印接收超时的问题
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "at_chat.h"
|
#include "at_chat.h"
|
||||||
@ -345,6 +346,7 @@ static void urc_handler_entry(at_obj_t *at, char *urc, unsigned int size)
|
|||||||
static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
||||||
{
|
{
|
||||||
char *urc_buf;
|
char *urc_buf;
|
||||||
|
int ch;
|
||||||
unsigned short urc_size;
|
unsigned short urc_size;
|
||||||
urc_buf = (char *)at->adap.urc_buf;
|
urc_buf = (char *)at->adap.urc_buf;
|
||||||
urc_size = at->adap.urc_bufsize;
|
urc_size = at->adap.urc_bufsize;
|
||||||
@ -352,20 +354,21 @@ static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
|||||||
if (size == 0 && at->urc_cnt > 0) {
|
if (size == 0 && at->urc_cnt > 0) {
|
||||||
if (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* 接收超时*/
|
if (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* 接收超时*/
|
||||||
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
||||||
at->recv_cnt = 0;
|
at->urc_cnt = 0;
|
||||||
AT_DEBUG("Urc recv timeout.\r\n");
|
AT_DEBUG("Urc recv timeout.\r\n");
|
||||||
}
|
}
|
||||||
} else if (urc_buf != NULL){
|
} else if (urc_buf != NULL){
|
||||||
at->urc_timer = AT_GET_TICK();
|
at->urc_timer = AT_GET_TICK();
|
||||||
while (size--) {
|
while (size--) {
|
||||||
if (*buf == '\n') { /*逐行处理*/
|
ch = *buf++;
|
||||||
|
urc_buf[at->urc_cnt++] = ch;
|
||||||
|
if (ch == '\n' || ch == '\r' || ch == '\0') { /*urc结束符*/
|
||||||
urc_buf[at->urc_cnt] = '\0';
|
urc_buf[at->urc_cnt] = '\0';
|
||||||
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
if (at->urc_cnt > 2)
|
||||||
} else {
|
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
||||||
urc_buf[at->urc_cnt++] = *buf++;
|
at->urc_cnt = 0;
|
||||||
if (at->urc_cnt >= urc_size) /* 溢出处理 */
|
} else if (at->urc_cnt >= urc_size) /* 溢出处理 */
|
||||||
at->urc_cnt = 0;
|
at->urc_cnt = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
* 2020-01-02 Morro 初版
|
* 2020-01-02 Morro 初版
|
||||||
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
||||||
* 调通单行命令、多行命令、自定义命令等接口
|
* 调通单行命令、多行命令、自定义命令等接口
|
||||||
|
* 2021-03-03 Morro 解决未清除URC计数器导致频繁打印接收超时的问题
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef _ATCHAT_H_
|
#ifndef _ATCHAT_H_
|
||||||
|
@ -7,15 +7,25 @@
|
|||||||
*
|
*
|
||||||
* Change Logs:
|
* Change Logs:
|
||||||
* Date Author Notes
|
* Date Author Notes
|
||||||
* 2021/01/20 Morro
|
* 2021-01-20 Morro 初版
|
||||||
|
* 2021-03-03 Morro 增加URC使用案例
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "at_chat.h"
|
#include "at_chat.h"
|
||||||
#include "wifi_uart.h"
|
#include "wifi_uart.h"
|
||||||
#include "public.h"
|
#include "public.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
|
#include "cli.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
void wifi_open(void);
|
||||||
|
void wifi_close(void);
|
||||||
|
static void at_error(void);
|
||||||
|
void wifi_query_version(void);
|
||||||
|
void wifi_ready_handler(char *recvbuf, int size);
|
||||||
|
void wifi_connected_handler(char *recvbuf, int size);
|
||||||
|
void wifi_disconnected_handler(char *recvbuf, int size);
|
||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
/*
|
/*
|
||||||
@ -23,25 +33,24 @@
|
|||||||
*/
|
*/
|
||||||
static at_obj_t at;
|
static at_obj_t at;
|
||||||
|
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
void wifi_open(void);
|
|
||||||
void wifi_close(void);
|
|
||||||
static void at_error(void);
|
|
||||||
void wifi_query_version(void);
|
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
/*
|
|
||||||
* @brief wifi urc»º³åÇø
|
|
||||||
*/
|
|
||||||
//static unsigned char wifi_urcbuf[256];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief wifi 数据接收缓冲区
|
* @brief wifi 数据接收缓冲区
|
||||||
*/
|
*/
|
||||||
static unsigned char wifi_recvbuf[256];
|
static unsigned char wifi_recvbuf[256];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief wifi URC接收缓冲区
|
||||||
|
*/
|
||||||
|
static unsigned char wifi_urcbuf[128];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief wifi URC表
|
||||||
|
*/
|
||||||
|
static const utc_item_t urc_table[] = {
|
||||||
|
"ready", wifi_ready_handler,
|
||||||
|
"WIFI CONNECTED:", wifi_connected_handler,
|
||||||
|
"WIFI DISCONNECTED", wifi_disconnected_handler,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief AT适配器
|
* @brief AT适配器
|
||||||
@ -50,14 +59,39 @@ static const at_adapter_t at_adapter = {
|
|||||||
.write = wifi_uart_write,
|
.write = wifi_uart_write,
|
||||||
.read = wifi_uart_read,
|
.read = wifi_uart_read,
|
||||||
.error = at_error,
|
.error = at_error,
|
||||||
.utc_tbl = NULL,
|
.utc_tbl = (utc_item_t *)urc_table,
|
||||||
.urc_buf = NULL,
|
.urc_buf = wifi_urcbuf,
|
||||||
.recv_buf = wifi_recvbuf,
|
.recv_buf = wifi_recvbuf,
|
||||||
.urc_tbl_count = 0,
|
.urc_tbl_count = sizeof(urc_table) / sizeof(urc_table[0]),
|
||||||
.urc_bufsize = 0,
|
.urc_bufsize = sizeof(wifi_urcbuf),
|
||||||
.recv_bufsize = sizeof(wifi_recvbuf)
|
.recv_bufsize = sizeof(wifi_recvbuf)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief wifi开机就绪事件
|
||||||
|
*/
|
||||||
|
void wifi_ready_handler(char *recvbuf, int size)
|
||||||
|
{
|
||||||
|
printf("WIFI ready...\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief wifi连接事件
|
||||||
|
*/
|
||||||
|
static void wifi_connected_handler(char *recvbuf, int size)
|
||||||
|
{
|
||||||
|
printf("WIFI connection detected...\r\n");
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* @brief wifi断开连接事件
|
||||||
|
*/
|
||||||
|
static void wifi_disconnected_handler(char *recvbuf, int size)
|
||||||
|
{
|
||||||
|
printf("WIFI disconnect detected...\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @brief 打开wifi
|
* @brief 打开wifi
|
||||||
*/
|
*/
|
||||||
@ -98,7 +132,7 @@ static int wifi_reset_work(at_env_t *e)
|
|||||||
e->state++;
|
e->state++;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (e->is_timeout(a, 2000)) //ÑÓʱµÈ´ý2s
|
if (e->is_timeout(a, 5000)) //大约延时等待5s至wifi启动
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
17
at_chat.c
17
at_chat.c
@ -10,6 +10,7 @@
|
|||||||
* 2020-01-02 Morro 初版
|
* 2020-01-02 Morro 初版
|
||||||
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
||||||
* 调通单行命令、多行命令、自定义命令等接口
|
* 调通单行命令、多行命令、自定义命令等接口
|
||||||
|
* 2021-03-03 Morro 解决未清除URC计数器导致频繁打印接收超时的问题
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "at_chat.h"
|
#include "at_chat.h"
|
||||||
@ -345,6 +346,7 @@ static void urc_handler_entry(at_obj_t *at, char *urc, unsigned int size)
|
|||||||
static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
||||||
{
|
{
|
||||||
char *urc_buf;
|
char *urc_buf;
|
||||||
|
int ch;
|
||||||
unsigned short urc_size;
|
unsigned short urc_size;
|
||||||
urc_buf = (char *)at->adap.urc_buf;
|
urc_buf = (char *)at->adap.urc_buf;
|
||||||
urc_size = at->adap.urc_bufsize;
|
urc_size = at->adap.urc_bufsize;
|
||||||
@ -352,20 +354,21 @@ static void urc_recv_process(at_obj_t *at, char *buf, unsigned int size)
|
|||||||
if (size == 0 && at->urc_cnt > 0) {
|
if (size == 0 && at->urc_cnt > 0) {
|
||||||
if (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* 接收超时*/
|
if (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* 接收超时*/
|
||||||
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
||||||
at->recv_cnt = 0;
|
at->urc_cnt = 0;
|
||||||
AT_DEBUG("Urc recv timeout.\r\n");
|
AT_DEBUG("Urc recv timeout.\r\n");
|
||||||
}
|
}
|
||||||
} else if (urc_buf != NULL){
|
} else if (urc_buf != NULL){
|
||||||
at->urc_timer = AT_GET_TICK();
|
at->urc_timer = AT_GET_TICK();
|
||||||
while (size--) {
|
while (size--) {
|
||||||
if (*buf == '\n') { /*逐行处理*/
|
ch = *buf++;
|
||||||
|
urc_buf[at->urc_cnt++] = ch;
|
||||||
|
if (ch == '\n' || ch == '\r' || ch == '\0') { /*urc结束符*/
|
||||||
urc_buf[at->urc_cnt] = '\0';
|
urc_buf[at->urc_cnt] = '\0';
|
||||||
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
if (at->urc_cnt > 2)
|
||||||
} else {
|
urc_handler_entry(at, urc_buf, at->urc_cnt);
|
||||||
urc_buf[at->urc_cnt++] = *buf++;
|
at->urc_cnt = 0;
|
||||||
if (at->urc_cnt >= urc_size) /* 溢出处理 */
|
} else if (at->urc_cnt >= urc_size) /* 溢出处理 */
|
||||||
at->urc_cnt = 0;
|
at->urc_cnt = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
* 2020-01-02 Morro 初版
|
* 2020-01-02 Morro 初版
|
||||||
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
* 2021-01-20 Morro 增加debug调试接口, 解决链表未初始化导至段错误的问题
|
||||||
* 调通单行命令、多行命令、自定义命令等接口
|
* 调通单行命令、多行命令、自定义命令等接口
|
||||||
|
* 2021-03-03 Morro 解决未清除URC计数器导致频繁打印接收超时的问题
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef _ATCHAT_H_
|
#ifndef _ATCHAT_H_
|
||||||
|
Loading…
Reference in New Issue
Block a user