浏览代码

add at_utils_send virtual function

malongwei 3 年之前
父节点
当前提交
180d0e1224
共有 3 个文件被更改,包括 28 次插入6 次删除
  1. 13 3
      components/net/at/src/at_client.c
  2. 5 1
      components/net/at/src/at_server.c
  3. 10 2
      components/net/at/src/at_utils.c

+ 13 - 3
components/net/at/src/at_client.c

@@ -8,7 +8,7 @@
  * 2018-03-30     chenyong     first version
  * 2018-03-30     chenyong     first version
  * 2018-04-12     chenyong     add client implement
  * 2018-04-12     chenyong     add client implement
  * 2018-08-17     chenyong     multiple client support
  * 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>
 #include <at.h>
@@ -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)

+ 5 - 1
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 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);
 }
 }
 
 
 /**
 /**

+ 10 - 2
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;
     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);
@@ -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);
     at_print_raw_cmd("sendline", send_buf, last_cmd_len);
 #endif
 #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)
 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);
     at_print_raw_cmd("sendline", send_buf, len);
 #endif
 #endif
 
 
-    return at_device_send(device, 0, send_buf, len);
+    return at_utils_send(device, 0, send_buf, len);
 }
 }