summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authormalongwei <[email protected]>2021-07-08 12:02:29 +0800
committermalongwei <[email protected]>2021-07-08 12:02:29 +0800
commit180d0e122499ad88f02558fdcab4a9e19b20bdbf (patch)
tree03413dcd0b8a086bbbd5115f4b43110c18849ef3 /components
parente7b63ed7ab2bed790d8b24b68333f65232f71926 (diff)
add at_utils_send virtual function
Diffstat (limited to 'components')
-rw-r--r--components/net/at/src/at_client.c16
-rw-r--r--components/net/at/src/at_server.c6
-rw-r--r--components/net/at/src/at_utils.c12
3 files changed, 28 insertions, 6 deletions
diff --git a/components/net/at/src/at_client.c b/components/net/at/src/at_client.c
index b320072b00..7904c24d92 100644
--- a/components/net/at/src/at_client.c
+++ b/components/net/at/src/at_client.c
@@ -8,7 +8,7 @@
* 2018-03-30 chenyong first version
* 2018-04-12 chenyong add client implement
* 2018-08-17 chenyong multiple client support
- * 2021-03-17 Meco Man fix a buf of leaking memory
+ * 2021-03-17 Meco Man fix a buf of leaking memory
*/
#include <at.h>
@@ -28,6 +28,10 @@
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 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);
@@ -392,7 +396,7 @@ int at_client_obj_wait_connect(at_client_t client, rt_uint32_t timeout)
/* Check whether it is already connected */
resp->buf_len = 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)
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);
#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)
diff --git a/components/net/at/src/at_server.c b/components/net/at/src/at_server.c
index 71435da25b..1db26a260b 100644
--- a/components/net/at/src/at_server.c
+++ b/components/net/at/src/at_server.c
@@ -38,6 +38,10 @@ static at_server_t at_server_local = RT_NULL;
static at_cmd_t cmd_table = RT_NULL;
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_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 rt_device_write(server->device, 0, buf, size);
+ return at_utils_send(server->device, 0, buf, size);
}
/**
diff --git a/components/net/at/src/at_utils.c b/components/net/at/src/at_utils.c
index d75ee0990e..028f262566 100644
--- a/components/net/at/src/at_utils.c
+++ b/components/net/at/src/at_utils.c
@@ -65,6 +65,14 @@ const char *at_get_last_cmd(rt_size_t *cmd_size)
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)
{
last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args);
@@ -75,7 +83,7 @@ rt_size_t at_vprintf(rt_device_t device, const char *format, va_list args)
at_print_raw_cmd("sendline", send_buf, last_cmd_len);
#endif
- return at_device_send(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)
@@ -93,5 +101,5 @@ rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args)
at_print_raw_cmd("sendline", send_buf, len);
#endif
- return at_device_send(device, 0, send_buf, len);
+ return at_utils_send(device, 0, send_buf, len);
}