Explorar el Código

[update] support cmux function

Signed-off-by: liuxinaliang <liuxianliang@rt-thread.com>
liuxinaliang hace 5 años
padre
commit
2e54e8ec42
Se han modificado 4 ficheros con 29 adiciones y 7 borrados
  1. 12 1
      class/ppp_device_air720.c
  2. 1 1
      samples/ppp_sample.c
  3. 10 1
      src/ppp_chat.c
  4. 6 4
      src/ppp_device.c

+ 12 - 1
class/ppp_device_air720.c

@@ -29,6 +29,7 @@
 
 #define AIR720_WARTING_TIME_BASE 2000
 
+#ifndef PKG_USING_CMUX
 static const struct modem_chat_data rst_mcd[] =
 {
     {"+++",          MODEM_CHAT_RESP_NOT_NEED,        30, 1, RT_TRUE},
@@ -42,9 +43,18 @@ static const struct modem_chat_data mcd[] =
     {PPP_APN_CMD,    MODEM_CHAT_RESP_OK,              1,  5, RT_FALSE},
     {PPP_DAIL_CMD,   MODEM_CHAT_RESP_CONNECT,         1, 30, RT_FALSE},
 };
-
+#else
+static const struct modem_chat_data mcd[] =
+{
+    {"AT",           MODEM_CHAT_RESP_NOT_NEED,         1,  1, RT_FALSE},
+    {"ATE0",         MODEM_CHAT_RESP_NOT_NEED,         1,  1, RT_FALSE},
+    {PPP_APN_CMD,    MODEM_CHAT_RESP_NOT_NEED,         1,  1, RT_FALSE},
+    {PPP_DAIL_CMD,   MODEM_CHAT_RESP_NOT_NEED,         1,  1, RT_FALSE},
+};
+#endif
 static rt_err_t ppp_air720_prepare(struct ppp_device *device)
 {
+#ifndef PKG_USING_CMUX
     if (device->power_pin >= 0)
     {
         rt_pin_write(device->power_pin, AIR720_POWER_OFF);
@@ -59,6 +69,7 @@ static rt_err_t ppp_air720_prepare(struct ppp_device *device)
         if (err)
             return err;
     }
+#endif
     return modem_chat(device->uart, mcd, sizeof(mcd) / sizeof(mcd[0]));
 }
 

+ 1 - 1
samples/ppp_sample.c

@@ -39,7 +39,7 @@ int ppp_sample_start(void)
     }
     return RT_EOK;
 }
-INIT_APP_EXPORT(ppp_sample_start);
+//INIT_APP_EXPORT(ppp_sample_start);
 MSH_CMD_EXPORT_ALIAS(ppp_sample_start, ppp_start, a sample of ppp device  for dailing to network);
 
 /* close ppp link ,turn off modem form network */

+ 10 - 1
src/ppp_chat.c

@@ -9,7 +9,12 @@
  */
 
 #include "ppp_chat.h"
+
+#ifndef PKG_USING_CMUX
 #define DBG_TAG    "ppp.chat"
+#else
+#define DBG_TAG    "chat"
+#endif
 
 #ifdef PPP_DEVICE_DEBUG
 #define DBG_LVL   DBG_LOG
@@ -175,7 +180,7 @@ static rt_err_t modem_chat_once(rt_device_t serial, const struct modem_chat_data
                         return RT_EOK;
 
                     LOG_W(CHAT_DATA_FMT" not matched, got: %s", CHAT_DATA_STR(data), resp2str(resp));
-                    return -RT_ERROR;
+                    continue;
                 }
             }
         }
@@ -248,6 +253,10 @@ rt_err_t modem_chat(rt_device_t serial, const struct modem_chat_data *data, rt_s
     }
 
     serial->rx_indicate = old_rx_ind;
+#ifndef PKG_USING_CMUX
+    LOG_D("(%s) has control by cmux.", serial->parent.name);
+#else
     LOG_D("(%s) has control by ppp_device.", serial->parent.name);
+#endif
     return err;
 }

+ 6 - 4
src/ppp_device.c

@@ -35,6 +35,9 @@ enum
 #define PPP_RECONNECT_TIME       2500
 #define PPP_RECV_READ_MAX        32
 
+#define PPP_RECEIVE_THREAD_STACK_SIZE 768
+#define PPP_RECEIVE_THREAD_PRIORITY   7
+
 
 #define PPP_EVENT_RX_NOTIFY 1   // serial incoming a byte
 #define PPP_EVENT_LOST      2   // PPP connection is lost
@@ -56,10 +59,9 @@ static struct ppp_device *_g_ppp_device = RT_NULL;
 #ifdef PPP_DEVICE_DEBUG
 static void ppp_debug_hexdump(const void *data, size_t len)
 {
-    const size_t maxlen = 16;
     rt_uint32_t offset = 0;
     size_t curlen = 0, i = 0;
-    char line[maxlen * 4 + 3] = {0};
+    char line[16 * 4 + 3] = {0};
     char *p = RT_NULL;
     const unsigned char *src = data;
 
@@ -464,8 +466,8 @@ static int ppp_recv_entry_creat(struct ppp_device *device)
     device->recv_tid = rt_thread_create("ppp_recv",
                                         (void (*)(void *parameter))ppp_recv_entry,
                                         device,
-                                        768,
-                                        8,
+                                        PPP_RECEIVE_THREAD_STACK_SIZE,
+                                        PPP_RECEIVE_THREAD_PRIORITY,
                                         20);
     if (device->recv_tid == RT_NULL)
     {