From 5fb6cb8b4159d8913e2b6dcd6d61f3a005204ddc Mon Sep 17 00:00:00 2001 From: malongwei <2544047213@qq.com> Date: Wed, 1 Sep 2021 19:58:23 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dringblk=5Fbuf=E5=9C=A8?= =?UTF-8?q?=E4=B8=8D=E4=BD=BF=E7=94=A8=E5=8A=A8=E6=80=81=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=97=B6=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/drivers/include/ipc/ringblk_buf.h | 5 ++++- components/drivers/src/ringblk_buf.c | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/components/drivers/include/ipc/ringblk_buf.h b/components/drivers/include/ipc/ringblk_buf.h index 5b2971b800..df05659f3e 100644 --- a/components/drivers/include/ipc/ringblk_buf.h +++ b/components/drivers/include/ipc/ringblk_buf.h @@ -76,9 +76,12 @@ typedef struct rt_rbb *rt_rbb_t; /* rbb (ring block buffer) API */ void rt_rbb_init(rt_rbb_t rbb, rt_uint8_t *buf, rt_size_t buf_size, rt_rbb_blk_t block_set, rt_size_t blk_max_num); +rt_size_t rt_rbb_get_buf_size(rt_rbb_t rbb); + +#ifdef RT_USING_HEAP rt_rbb_t rt_rbb_create(rt_size_t buf_size, rt_size_t blk_max_num); void rt_rbb_destroy(rt_rbb_t rbb); -rt_size_t rt_rbb_get_buf_size(rt_rbb_t rbb); +#endif /* rbb block API */ rt_rbb_blk_t rt_rbb_blk_alloc(rt_rbb_t rbb, rt_size_t blk_size); diff --git a/components/drivers/src/ringblk_buf.c b/components/drivers/src/ringblk_buf.c index c6688b3d2b..b966da3d36 100644 --- a/components/drivers/src/ringblk_buf.c +++ b/components/drivers/src/ringblk_buf.c @@ -44,6 +44,8 @@ void rt_rbb_init(rt_rbb_t rbb, rt_uint8_t *buf, rt_size_t buf_size, rt_rbb_blk_t } RTM_EXPORT(rt_rbb_init); +#ifdef RT_USING_HEAP + /** * ring block buffer object create * @@ -102,6 +104,8 @@ void rt_rbb_destroy(rt_rbb_t rbb) } RTM_EXPORT(rt_rbb_destroy); +#endif + static rt_rbb_blk_t find_empty_blk_in_set(rt_rbb_t rbb) { rt_size_t i; From c229d8b2b5bdeca592189f0833361b855ef12d69 Mon Sep 17 00:00:00 2001 From: malongwei <2544047213@qq.com> Date: Wed, 1 Sep 2021 21:19:22 +0800 Subject: [PATCH 2/3] fix at_client.c --- components/net/at/src/at_client.c | 39 ++++++++++++++++--------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/components/net/at/src/at_client.c b/components/net/at/src/at_client.c index 948020f4cf..a696a408be 100644 --- a/components/net/at/src/at_client.c +++ b/components/net/at/src/at_client.c @@ -310,7 +310,6 @@ int at_obj_exec_cmd(at_client_t client, at_response_t resp, const char *cmd_expr rt_mutex_take(client->lock, RT_WAITING_FOREVER); client->resp_status = AT_RESP_OK; - client->resp = resp; if (resp != RT_NULL) { @@ -318,6 +317,9 @@ int at_obj_exec_cmd(at_client_t client, at_response_t resp, const char *cmd_expr resp->line_counts = 0; } + client->resp = resp; + rt_sem_control(client->resp_notice, RT_IPC_CMD_RESET, RT_NULL); + va_start(args, cmd_expr); at_vprintfln(client->device, cmd_expr, args); va_end(args); @@ -327,7 +329,7 @@ int at_obj_exec_cmd(at_client_t client, at_response_t resp, const char *cmd_expr if (rt_sem_take(client->resp_notice, resp->timeout) != RT_EOK) { cmd = at_get_last_cmd(&cmd_size); - LOG_D("execute command (%.*s) timeout (%d ticks)!", cmd_size, cmd, resp->timeout); + LOG_W("execute command (%.*s) timeout (%d ticks)!", cmd_size, cmd, resp->timeout); client->resp_status = AT_RESP_TIMEOUT; result = -RT_ETIMEOUT; goto __exit; @@ -381,6 +383,7 @@ int at_client_obj_wait_connect(at_client_t client, rt_uint32_t timeout) rt_mutex_take(client->lock, RT_WAITING_FOREVER); client->resp = resp; + rt_sem_control(client->resp_notice, RT_IPC_CMD_RESET, RT_NULL); start_time = rt_tick_get(); @@ -480,9 +483,7 @@ static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeo */ rt_size_t at_client_obj_recv(at_client_t client, char *buf, rt_size_t size, rt_int32_t timeout) { - rt_size_t read_idx = 0; - rt_err_t result = RT_EOK; - char ch; + rt_size_t len = 0; RT_ASSERT(buf); @@ -494,28 +495,28 @@ rt_size_t at_client_obj_recv(at_client_t client, char *buf, rt_size_t size, rt_i while (1) { - if (read_idx < size) - { - result = at_client_getchar(client, &ch, timeout); - if (result != RT_EOK) - { - LOG_E("AT Client receive failed, uart device get data error(%d)", result); - return 0; - } + rt_sem_control(client->rx_notice, RT_IPC_CMD_RESET, RT_NULL); - buf[read_idx++] = ch; - } - else + rt_size_t read_len = rt_device_read(client->device, 0, buf + len, size); + if(read_len > 0) { - break; + len += read_len; + size -= read_len; + if(size == 0) + break; + + continue; } + + if(rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout)) != RT_EOK) + break; } #ifdef AT_PRINT_RAW_CMD - at_print_raw_cmd("urc_recv", buf, size); + at_print_raw_cmd("urc_recv", buf, len); #endif - return read_idx; + return len; } /** From f1e1b6b2e39ac7c62fbe4b60d5c03fe60fb7d5c9 Mon Sep 17 00:00:00 2001 From: malongwei <2544047213@qq.com> Date: Fri, 3 Sep 2021 20:16:35 +0800 Subject: [PATCH 3/3] fix at_client.c --- components/net/at/src/at_client.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/net/at/src/at_client.c b/components/net/at/src/at_client.c index a696a408be..845d8c0fa6 100644 --- a/components/net/at/src/at_client.c +++ b/components/net/at/src/at_client.c @@ -429,6 +429,8 @@ int at_client_obj_wait_connect(at_client_t client, rt_uint32_t timeout) */ rt_size_t at_client_obj_send(at_client_t client, const char *buf, rt_size_t size) { + rt_size_t len; + RT_ASSERT(buf); if (client == RT_NULL) @@ -443,7 +445,7 @@ rt_size_t at_client_obj_send(at_client_t client, const char *buf, rt_size_t size rt_mutex_take(client->lock, RT_WAITING_FOREVER); - rt_size_t len = at_utils_send(client->device, 0, buf, size); + len = at_utils_send(client->device, 0, buf, size); rt_mutex_release(client->lock); @@ -495,9 +497,11 @@ rt_size_t at_client_obj_recv(at_client_t client, char *buf, rt_size_t size, rt_i while (1) { + rt_size_t read_len; + rt_sem_control(client->rx_notice, RT_IPC_CMD_RESET, RT_NULL); - rt_size_t read_len = rt_device_read(client->device, 0, buf + len, size); + read_len = rt_device_read(client->device, 0, buf + len, size); if(read_len > 0) { len += read_len;