Browse Source

Add M6312 support

Signed-off-by: xiaofan <xfan1024@live.com>
xiaofan 6 năm trước cách đây
mục cha
commit
79b1d89aac
4 tập tin đã thay đổi với 277 bổ sung0 xóa
  1. 7 0
      SConscript
  2. 143 0
      class/m6312/ppp_device_m6312.c
  3. 25 0
      class/m6312/ppp_device_m6312.h
  4. 102 0
      samples/ppp_sample_m6312.c

+ 7 - 0
SConscript

@@ -11,6 +11,13 @@ if GetDepend(['PPP_DEVICE_USING_AIR720']):
     if GetDepend(['PPP_DEVICE_AIR720_SAMPLE']):
         src += Glob('samples/ppp_sample_air720.c')
 
+# M6312
+if GetDepend(['PPP_DEVICE_USING_M6312']):
+    path += [cwd + '/class/m6312']
+    src += Glob('class/m6312/ppp_device_m6312.c')
+    if GetDepend(['PPP_DEVICE_M6312_SAMPLE']):
+        src += Glob('samples/ppp_sample_m6312.c')
+
 group = DefineGroup('ppp_device', src, depend = ['PKG_USING_PPP_DEVICE'], CPPPATH = path)
 
 Return('group')

+ 143 - 0
class/m6312/ppp_device_m6312.c

@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2006-2019, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author         Notes
+ * 2019-09-24     xiaofao        the first version
+ */
+
+#include <ppp_device_m6312.h>
+
+#define DBG_TAG    "ppp.m6312"
+
+#ifdef PPP_DEVICE_DEBUG
+#define DBG_LVL   DBG_LOG
+#else
+#define DBG_LVL   DBG_INFO
+#endif
+
+#include <rtdbg.h>
+
+static const struct modem_chat_data mcd[] =
+{
+    {"+++",          MODEM_CHAT_RESP_OK,        10, 1},
+    {"ATH",          MODEM_CHAT_RESP_OK,        1,  1},
+    {"AT+CMRESET",   MODEM_CHAT_RESP_NOT_NEED,  1,  1},
+    {"AT",           MODEM_CHAT_RESP_OK,        10, 1},
+    {"ATE0",         MODEM_CHAT_RESP_OK,        1,  1},
+    {PPP_APN_CMD,    MODEM_CHAT_RESP_OK,        1,  5},
+    {PPP_DAIL_CMD,   MODEM_CHAT_RESP_CONNECT,   2, 30},
+};
+
+/*
+ * Use AT command init modem
+ *
+ * @param struct ppp_device *device
+ *
+ * @return  0: execute successful
+ *         -1: send AT commands errorstruct struct ppp_device *device *devicestruct ppp_device *device
+ *         -5: no memory
+ */
+static rt_err_t ppp_m6312_init(struct ppp_device *device)
+{
+    RT_ASSERT(device != RT_NULL);
+    return RT_EOK;
+}
+
+/*
+ * Get into PPP modem,using uart
+ *
+ * @param NULL
+ *
+ * @return  0: execute successful
+ *         -1: send AT commands error
+ *         -5: no memory
+ */
+static rt_err_t ppp_m6312_open(struct ppp_device *device, rt_uint16_t oflag)
+{
+    rt_device_t uart_device = RT_NULL;
+    rt_err_t result = RT_EOK;
+
+    RT_ASSERT(device != RT_NULL);
+
+    uart_device = rt_device_find(device->rely_name);
+    if (uart_device == RT_NULL)
+    {
+        LOG_E("Can't find relying device %s.", device->rely_name);
+        return -RT_ERROR;
+    }
+    result = rt_device_open(uart_device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX);
+    if (result != RT_EOK)
+    {
+        LOG_E("relying device open(%s) fail.", device->rely_name);
+        return RT_NULL;
+    }
+
+    return modem_chat(uart_device, mcd, sizeof(mcd) / sizeof(mcd[0]));
+}
+
+/*
+ * close ppp , deinit uart
+ *
+ * @param NULL
+ *
+ * @return  0: execute successful
+ *         -1: send AT commands error
+ *         -5: no memory
+ */
+static rt_err_t ppp_m6312_close(struct ppp_device *device)
+{
+    RT_ASSERT(device != RT_NULL);
+    return RT_EOK;
+}
+
+/*
+ * control,using AT command to get csq,imei,net_type value
+ *
+ * @param struct ppp_device *
+ *               cmd
+ *               *arg
+ * @return  0: execute successful
+ *         -1: send AT commands error
+ *         -5: no memory
+ */
+static rt_err_t ppp_m6312_control(struct ppp_device *device, int cmd, void *arg)
+{
+    RT_ASSERT(device != RT_NULL);
+    return RT_EOK;
+}
+
+/* ppp_m6312_ops for ppp_device_ops , a common interface */
+static struct ppp_device_ops m6312_ops =
+{
+    ppp_m6312_init,
+    ppp_m6312_open,
+    ppp_m6312_close,
+    ppp_m6312_control
+};
+
+/*
+ * register m6312 into ppp_device
+ *
+ * @param struct ppp_m6312 *       piont
+ *        const char *              name
+ *        int                       flag
+ *        void *                    resever data
+ * @return  ppp_device function piont
+ *
+ */
+int ppp_m6312_register(struct ppp_m6312 *m6312, const char *dev_name, const char *uart_name, void *user_data)
+{
+    struct ppp_device *ppp_device = RT_NULL;
+
+    RT_ASSERT(m6312 != RT_NULL);
+
+    ppp_device = &(m6312->device);
+    ppp_device->ops = &m6312_ops;
+
+    LOG_D("ppp m6312 is registering ppp_device");
+
+    return ppp_device_register(ppp_device, dev_name, uart_name, user_data);
+}

+ 25 - 0
class/m6312/ppp_device_m6312.h

@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2006-2019, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author         Notes
+ * 2019-09-24     xiaofao        the first version
+ */
+
+#ifndef __PPP_M6312_H__
+#define __PPP_M6312_H__
+
+#include <ppp_device.h>
+
+/* M6312  ppp_device base from ppp_device */
+struct ppp_m6312
+{
+    struct ppp_device  device;          /* ppp_device struct in ppp_m6312 */
+    enum ppp_trans_type type;           /* the type is used to establish a ppp connection */
+};
+
+extern int ppp_m6312_register(struct ppp_m6312 *m6312, const char *dev_name, const char *rely_name, void *user_data);
+
+#endif  /* __PPP_M6312_H__ */

+ 102 - 0
samples/ppp_sample_m6312.c

@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2006-2019, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date           Author         Notes
+ * 2019-09-24     xiaofao        the first version
+ */
+
+#include<rtthread.h>
+#include<ppp_device_m6312.h>
+
+
+#define DBG_TAG    "m6312.sample"
+
+#ifdef PPP_DEVICE_DEBUG
+#define DBG_LVL   DBG_LOG
+#else
+#define DBG_LVL   DBG_INFO
+#endif
+
+#include <rtdbg.h>
+
+static struct ppp_m6312 m6312;
+
+/*
+ * init m6312 mode
+ *
+ * @param NULL
+ *
+ *
+ * @return  RT_EOK      successful
+ *          -RT_ERROR   failed
+ *
+ */
+
+int ppp_m6312_init(void)
+{
+    int result = RT_EOK;
+
+    result = ppp_m6312_register(&m6312, PPP_M6312_DEVICE_NAME, PPP_M6312_CLIENT_NAME, RT_NULL);
+    if (result != RT_EOK)
+    {
+        LOG_E("%s registered failed, please try again.", PPP_M6312_DEVICE_NAME);
+    }
+
+    return result;
+}
+INIT_ENV_EXPORT(ppp_m6312_init);
+
+int ppp_m6312_start(void)
+{
+    rt_device_t device = RT_NULL;
+
+    device = rt_device_find(PPP_M6312_DEVICE_NAME);
+    if (device == RT_NULL)
+    {
+        LOG_E("Cann't find device %s, execute failed", PPP_M6312_DEVICE_NAME);
+        return -RT_ERROR;
+    }
+
+    if (rt_device_open(device, 0) != RT_EOK)
+    {
+        LOG_E("Cann't open device %s, execute failed", PPP_M6312_DEVICE_NAME);
+        return -RT_ERROR;
+    }
+
+    return RT_EOK;
+}
+INIT_APP_EXPORT(ppp_m6312_start);
+MSH_CMD_EXPORT(ppp_m6312_start, a sample create m6312 for dail to network);
+/*
+ * close m6312 ppp mode, hang up from network
+ *
+ * @param NULL
+ *
+ *
+ * @return  NULL
+ *
+ */
+int ppp_m6312_stop(void)
+{
+    rt_device_t device = RT_NULL;
+
+    device = rt_device_find(PPP_M6312_DEVICE_NAME);
+    if (device == RT_NULL)
+    {
+        LOG_E("Cann't find device %s, execute failed", PPP_M6312_DEVICE_NAME);
+        return -RT_ERROR;
+    }
+
+    if (rt_device_close(device) != RT_EOK)
+    {
+        LOG_E("Cann't close device %s, execute failed", PPP_M6312_DEVICE_NAME);
+        return -RT_ERROR;
+    }
+
+    return RT_EOK;
+}
+MSH_CMD_EXPORT(ppp_m6312_stop, a sample stop m6312 for dail to network);
+