Merge pull request #4855 from loogg/mlw
fix at_vprintf and at_vprintfln and end_sign response
This commit is contained in:
commit
bdcd6420ac
|
@ -28,6 +28,10 @@
|
||||||
|
|
||||||
static struct at_client at_client_table[AT_CLIENT_NUM_MAX] = { 0 };
|
static struct at_client at_client_table[AT_CLIENT_NUM_MAX] = { 0 };
|
||||||
|
|
||||||
|
extern rt_size_t at_utils_send(rt_device_t dev,
|
||||||
|
rt_off_t pos,
|
||||||
|
const void *buffer,
|
||||||
|
rt_size_t size);
|
||||||
extern rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args);
|
extern rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args);
|
||||||
extern void at_print_raw_cmd(const char *type, const char *cmd, rt_size_t size);
|
extern void at_print_raw_cmd(const char *type, const char *cmd, rt_size_t size);
|
||||||
extern const char *at_get_last_cmd(rt_size_t *cmd_size);
|
extern const char *at_get_last_cmd(rt_size_t *cmd_size);
|
||||||
|
@ -392,7 +396,7 @@ int at_client_obj_wait_connect(at_client_t client, rt_uint32_t timeout)
|
||||||
/* Check whether it is already connected */
|
/* Check whether it is already connected */
|
||||||
resp->buf_len = 0;
|
resp->buf_len = 0;
|
||||||
resp->line_counts = 0;
|
resp->line_counts = 0;
|
||||||
rt_device_write(client->device, 0, "AT\r\n", 4);
|
at_utils_send(client->device, 0, "AT\r\n", 4);
|
||||||
|
|
||||||
if (rt_sem_take(client->resp_notice, resp->timeout) != RT_EOK)
|
if (rt_sem_take(client->resp_notice, resp->timeout) != RT_EOK)
|
||||||
continue;
|
continue;
|
||||||
|
@ -433,7 +437,13 @@ rt_size_t at_client_obj_send(at_client_t client, const char *buf, rt_size_t size
|
||||||
at_print_raw_cmd("sendline", buf, size);
|
at_print_raw_cmd("sendline", buf, size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rt_device_write(client->device, 0, buf, size);
|
rt_mutex_take(client->lock, RT_WAITING_FOREVER);
|
||||||
|
|
||||||
|
rt_size_t len = at_utils_send(client->device, 0, buf, size);
|
||||||
|
|
||||||
|
rt_mutex_release(client->lock);
|
||||||
|
|
||||||
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeout)
|
static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeout)
|
||||||
|
@ -735,6 +745,8 @@ static void client_parser(at_client_t client)
|
||||||
{
|
{
|
||||||
at_response_t resp = client->resp;
|
at_response_t resp = client->resp;
|
||||||
|
|
||||||
|
char end_ch = client->recv_line_buf[client->recv_line_len - 1];
|
||||||
|
|
||||||
/* current receive is response */
|
/* current receive is response */
|
||||||
client->recv_line_buf[client->recv_line_len - 1] = '\0';
|
client->recv_line_buf[client->recv_line_len - 1] = '\0';
|
||||||
if (resp->buf_len + client->recv_line_len < resp->buf_size)
|
if (resp->buf_len + client->recv_line_len < resp->buf_size)
|
||||||
|
@ -752,7 +764,12 @@ static void client_parser(at_client_t client)
|
||||||
LOG_E("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", resp->buf_size);
|
LOG_E("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", resp->buf_size);
|
||||||
}
|
}
|
||||||
/* check response result */
|
/* check response result */
|
||||||
if (rt_memcmp(client->recv_line_buf, AT_RESP_END_OK, rt_strlen(AT_RESP_END_OK)) == 0
|
if ((client->end_sign != 0) && (end_ch == client->end_sign) && (resp->line_num == 0))
|
||||||
|
{
|
||||||
|
/* get the end sign, return response state END_OK.*/
|
||||||
|
client->resp_status = AT_RESP_OK;
|
||||||
|
}
|
||||||
|
else if (rt_memcmp(client->recv_line_buf, AT_RESP_END_OK, rt_strlen(AT_RESP_END_OK)) == 0
|
||||||
&& resp->line_num == 0)
|
&& resp->line_num == 0)
|
||||||
{
|
{
|
||||||
/* get the end data by response result, return response state END_OK. */
|
/* get the end data by response result, return response state END_OK. */
|
||||||
|
|
|
@ -38,6 +38,10 @@ static at_server_t at_server_local = RT_NULL;
|
||||||
static at_cmd_t cmd_table = RT_NULL;
|
static at_cmd_t cmd_table = RT_NULL;
|
||||||
static rt_size_t cmd_num;
|
static rt_size_t cmd_num;
|
||||||
|
|
||||||
|
extern rt_size_t at_utils_send(rt_device_t dev,
|
||||||
|
rt_off_t pos,
|
||||||
|
const void *buffer,
|
||||||
|
rt_size_t size);
|
||||||
extern void at_vprintf(rt_device_t device, const char *format, va_list args);
|
extern void at_vprintf(rt_device_t device, const char *format, va_list args);
|
||||||
extern void at_vprintfln(rt_device_t device, const char *format, va_list args);
|
extern void at_vprintfln(rt_device_t device, const char *format, va_list args);
|
||||||
|
|
||||||
|
@ -187,7 +191,7 @@ rt_size_t at_server_send(at_server_t server, const char *buf, rt_size_t size)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return rt_device_write(server->device, 0, buf, size);
|
return at_utils_send(server->device, 0, buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -65,24 +65,41 @@ const char *at_get_last_cmd(rt_size_t *cmd_size)
|
||||||
return send_buf;
|
return send_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RT_WEAK rt_size_t at_utils_send(rt_device_t dev,
|
||||||
|
rt_off_t pos,
|
||||||
|
const void *buffer,
|
||||||
|
rt_size_t size)
|
||||||
|
{
|
||||||
|
return rt_device_write(dev, pos, buffer, size);
|
||||||
|
}
|
||||||
|
|
||||||
rt_size_t at_vprintf(rt_device_t device, const char *format, va_list args)
|
rt_size_t at_vprintf(rt_device_t device, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args);
|
last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args);
|
||||||
|
if(last_cmd_len > sizeof(send_buf))
|
||||||
|
last_cmd_len = sizeof(send_buf);
|
||||||
|
|
||||||
#ifdef AT_PRINT_RAW_CMD
|
#ifdef AT_PRINT_RAW_CMD
|
||||||
at_print_raw_cmd("sendline", send_buf, last_cmd_len);
|
at_print_raw_cmd("sendline", send_buf, last_cmd_len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return rt_device_write(device, 0, send_buf, last_cmd_len);
|
return at_utils_send(device, 0, send_buf, last_cmd_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args)
|
rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args)
|
||||||
{
|
{
|
||||||
rt_size_t len;
|
rt_size_t len;
|
||||||
|
|
||||||
len = at_vprintf(device, format, args);
|
last_cmd_len = vsnprintf(send_buf, sizeof(send_buf) - 2, format, args);
|
||||||
|
if(last_cmd_len > sizeof(send_buf) - 2)
|
||||||
|
last_cmd_len = sizeof(send_buf) - 2;
|
||||||
|
rt_memcpy(send_buf + last_cmd_len, "\r\n", 2);
|
||||||
|
|
||||||
rt_device_write(device, 0, "\r\n", 2);
|
len = last_cmd_len + 2;
|
||||||
|
|
||||||
return len + 2;
|
#ifdef AT_PRINT_RAW_CMD
|
||||||
|
at_print_raw_cmd("sendline", send_buf, len);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return at_utils_send(device, 0, send_buf, len);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue