1.解决未清除URC计数器导致频繁打印接收超时的问题

2.增加URC演示程序
This commit is contained in:
魔罗技术 2021-03-03 20:51:14 +08:00
parent 3d482232c8
commit 93c7ab71ff
5 changed files with 75 additions and 33 deletions

View File

@ -10,6 +10,7 @@
* 2020-01-02 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2021-01-20 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug<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>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚӿ<EFBFBD>
* 2021-03-03 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>URC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************/
#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)
{
char *urc_buf;
int ch;
unsigned short urc_size;
urc_buf = (char *)at->adap.urc_buf;
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 (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* <20><><EFBFBD>ճ<EFBFBD>ʱ*/
urc_handler_entry(at, urc_buf, at->urc_cnt);
at->recv_cnt = 0;
at->urc_cnt = 0;
AT_DEBUG("Urc recv timeout.\r\n");
}
} else if (urc_buf != NULL){
at->urc_timer = AT_GET_TICK();
while (size--) {
if (*buf == '\n') { /*<2A><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>*/
ch = *buf++;
urc_buf[at->urc_cnt++] = ch;
if (ch == '\n' || ch == '\r' || ch == '\0') { /*urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
urc_buf[at->urc_cnt] = '\0';
urc_handler_entry(at, urc_buf, at->urc_cnt);
} else {
urc_buf[at->urc_cnt++] = *buf++;
if (at->urc_cnt >= urc_size) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (at->urc_cnt > 2)
urc_handler_entry(at, urc_buf, at->urc_cnt);
at->urc_cnt = 0;
} else if (at->urc_cnt >= urc_size) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
at->urc_cnt = 0;
}
}
}
}

View File

@ -10,6 +10,7 @@
* 2020-01-02 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2021-01-20 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug<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>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚӿ<EFBFBD>
* 2021-03-03 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>URC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************/
#ifndef _ATCHAT_H_

View File

@ -7,15 +7,25 @@
*
* Change Logs:
* Date Author Notes
* 2021/01/20 Morro
* 2021-01-20 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2021-03-03 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>URCʹ<EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD>
******************************************************************************/
#include "at_chat.h"
#include "wifi_uart.h"
#include "public.h"
#include "module.h"
#include "cli.h"
#include <stdio.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 ---------------------------------------------------------*/
/*
@ -23,25 +33,24 @@
*/
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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
//static unsigned char wifi_urcbuf[256];
/*
* @brief wifi <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static unsigned char wifi_recvbuf[256];
/*
* @brief wifi URC<EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
static unsigned char wifi_urcbuf[128];
/*
* @brief wifi URC<EFBFBD><EFBFBD>
*/
static const utc_item_t urc_table[] = {
"ready", wifi_ready_handler,
"WIFI CONNECTED:", wifi_connected_handler,
"WIFI DISCONNECTED", wifi_disconnected_handler,
};
/*
* @brief AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -50,14 +59,39 @@ static const at_adapter_t at_adapter = {
.write = wifi_uart_write,
.read = wifi_uart_read,
.error = at_error,
.utc_tbl = NULL,
.urc_buf = NULL,
.utc_tbl = (utc_item_t *)urc_table,
.urc_buf = wifi_urcbuf,
.recv_buf = wifi_recvbuf,
.urc_tbl_count = 0,
.urc_bufsize = 0,
.urc_tbl_count = sizeof(urc_table) / sizeof(urc_table[0]),
.urc_bufsize = sizeof(wifi_urcbuf),
.recv_bufsize = sizeof(wifi_recvbuf)
};
/* Private functions ---------------------------------------------------------*/
/*
* @brief wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
*/
void wifi_ready_handler(char *recvbuf, int size)
{
printf("WIFI ready...\r\n");
}
/*
* @brief wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
*/
static void wifi_connected_handler(char *recvbuf, int size)
{
printf("WIFI connection detected...\r\n");
}
/*
* @brief wifi<EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
*/
static void wifi_disconnected_handler(char *recvbuf, int size)
{
printf("WIFI disconnect detected...\r\n");
}
/*
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi
*/
@ -98,7 +132,7 @@ static int wifi_reset_work(at_env_t *e)
e->state++;
break;
case 3:
if (e->is_timeout(a, 2000)) //<2F><>ʱ<EFBFBD>ȴ<EFBFBD>2s
if (e->is_timeout(a, 5000)) //<2F><>Լ<EFBFBD><D4BC>ʱ<EFBFBD>ȴ<EFBFBD>5s<35><73>wifi<66><69><EFBFBD><EFBFBD>
return true;
break;
}

View File

@ -10,6 +10,7 @@
* 2020-01-02 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2021-01-20 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug<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>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚӿ<EFBFBD>
* 2021-03-03 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>URC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************/
#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)
{
char *urc_buf;
int ch;
unsigned short urc_size;
urc_buf = (char *)at->adap.urc_buf;
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 (AT_IS_TIMEOUT(at->urc_timer, 2000)) { /* <20><><EFBFBD>ճ<EFBFBD>ʱ*/
urc_handler_entry(at, urc_buf, at->urc_cnt);
at->recv_cnt = 0;
at->urc_cnt = 0;
AT_DEBUG("Urc recv timeout.\r\n");
}
} else if (urc_buf != NULL){
at->urc_timer = AT_GET_TICK();
while (size--) {
if (*buf == '\n') { /*<2A><><EFBFBD>д<EFBFBD><D0B4><EFBFBD>*/
ch = *buf++;
urc_buf[at->urc_cnt++] = ch;
if (ch == '\n' || ch == '\r' || ch == '\0') { /*urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
urc_buf[at->urc_cnt] = '\0';
urc_handler_entry(at, urc_buf, at->urc_cnt);
} else {
urc_buf[at->urc_cnt++] = *buf++;
if (at->urc_cnt >= urc_size) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
if (at->urc_cnt > 2)
urc_handler_entry(at, urc_buf, at->urc_cnt);
at->urc_cnt = 0;
} else if (at->urc_cnt >= urc_size) /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
at->urc_cnt = 0;
}
}
}
}

View File

@ -10,6 +10,7 @@
* 2020-01-02 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* 2021-01-20 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>debug<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>ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚӿ<EFBFBD>
* 2021-03-03 Morro <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>URC<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************/
#ifndef _ATCHAT_H_