summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/net/at/src/at_client.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/components/net/at/src/at_client.c b/components/net/at/src/at_client.c
index b9d0ee89cb..788549392d 100644
--- a/components/net/at/src/at_client.c
+++ b/components/net/at/src/at_client.c
@@ -434,20 +434,18 @@ static rt_err_t at_client_getchar(at_client_t client, char *ch, rt_int32_t timeo
{
rt_err_t result = RT_EOK;
-__retry:
- result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout));
- if (result != RT_EOK)
- {
- return result;
- }
- if(rt_device_read(client->device, 0, ch, 1) == 1)
- {
- return RT_EOK;
- }
- else
+ while (rt_device_read(client->device, 0, ch, 1) == 0)
{
- goto __retry;
+ rt_sem_control(client->rx_notice, RT_IPC_CMD_RESET, RT_NULL);
+
+ result = rt_sem_take(client->rx_notice, rt_tick_from_millisecond(timeout));
+ if (result != RT_EOK)
+ {
+ return result;
+ }
}
+
+ return RT_EOK;
}
/**