Преглед изворни кода

[update] update documents

Signed-off-by: liuxinaliang <liuxianliang@rt-thread.com>
liuxinaliang пре 5 година
родитељ
комит
629ec507be
2 измењених фајлова са 22 додато и 135 уклоњено
  1. 19 19
      README.md
  2. 3 116
      docs/cmux_basic.md

+ 19 - 19
README.md

@@ -2,41 +2,41 @@
 
 ## 1. 简介
 
-- cmux 软件包,其功能为在一个真实物理通道上虚拟出多个通道,使得可以同时在一个物理串口接口上存在多个会话。两个模块仅使用一个真实物理串口连接,可以使用软件包虚拟出多组串口,通过虚拟出的不同串口用于不同的通信场景。例如板载串口资源受限时,可以使用软件包以实现使用多个串口的目的
+CMUX(Connection Multiplexing ),即串口多路复用,其功能主要在一个真实的物理通道上虚拟多个通道,每个虚拟通道上的连接和数据通讯可独立进行
 
--  cmux 的常见使用场景有: 蜂窝模块的串口复用功能 -- GSM0707 / GSM0710 协议,使用 cmux( gsm ) + ppp 组合可以实现在实现 PPP 拨号上网的同时,提供 AT 命令和 MODEM 数据通道,实时获取模块状态而无需退出 PPP 功能。通过多路复用协议和蜂窝模组通讯,使得可以在拨号上网时可以同时拨打电话和收发短信
+CMUX 软件包常用于蜂窝模块串口复用功能(PPP + AT 模式),以及串口硬件资源受限的设备
 
-  cmux 软件包特点如下:
+CMUX 软件包特点如下:
 
-  - 可以由一个真实串口虚拟出多个串口
-  - 支持多种蜂窝模块
-  - 可以添加 PPP 功能
+- 支持通过真实串口虚拟出多个串口;
+- 支持所有基于 GSM0707/ 0710 协议的蜂窝模块;
+- 支持无缝接入 PPP 功能;
 
-  目前 CMUX 的 GSM 功能支持 Luat Air720, SIM7600, SIM800C 模块,后续会接入更多蜂窝模块。
+目前 CMUX 的 GSM 功能支持 Luat Air720, SIM7600, SIM800C 模块,后续会接入更多蜂窝模块。
 
-  ### 1.1 框架图
+### 1.1 框架图
 
-  ![](docs/figures/cmux_frame.png)
+![](docs/figures/cmux_frame.png)
 
 - CMUX 是一种类似于传输层的协议,用户使用时无法感知该层;数据传输依赖一个真实串口传输,cmux 层负责解析数据用以分发到不同的 virtual uart ;从而实现一个真实串口虚拟出多个 UART 的目的
 
 - CMUX 在应用场景中多用于 UART, 如有必要也可以支持 SPI 方式
-  
+
   ### 1.2 目录结构
 ```shell
 cmux
-├───docs 
-│   └───figures                     // 文档使用图片	
+├───docs
+│   └───figures                     // 文档使用图片
 ├───inc                             // 头文件
 │   │───gsm
-│   │   └─── cmux_chat.h    
-│   └─── cmux.h       
+│   │   └─── cmux_chat.h
+│   └─── cmux.h
 ├───sample                          // 示例文件
-│   └─── cmux_sample_gsm.c     
+│   └─── cmux_sample_gsm.c
 ├───src                             // 源码文件
 │   ├───gsm
-│   │   ├─── cmux_chat.c 
-│   │   └─── cmux_gsm.c  
+│   │   ├─── cmux_chat.c
+│   │   └─── cmux_gsm.c
 │   ├─── cmux_utils.c
 │   └─── cmux.c
 ├───LICENSE                         // 软件包许可证
@@ -177,10 +177,10 @@ ping www.baidu.com
 msh >ready
 msh >[D/main] cmux control channel has been open.
 [D/main] write data : 9
-[D/main] 15 ,Recieve  
+[D/main] 15 ,Recieve
 +CSQ: 29,99
 
-[D/main] 6 ,Recieve  
+[D/main] 6 ,Recieve
 OK
 ```
 在使用 PPP 功能的同时,可以使用虚拟出的 cmux_at 串口同时读取模块信号强度值,具体可以参考[<使用文档>](./docs/cmux_port.md)

+ 3 - 116
docs/cmux_basic.md

@@ -1,5 +1,3 @@
-# CMUX 功能
-
 ## 1. CMUX 的实现原理
 
 GSM 07.10 协议支持
@@ -8,7 +6,7 @@ GSM 07.10 协议支持
 
 ​    以上是一次 CMUX 建立,通话和销毁的基本流程,因为牵扯到真实串口到虚拟串口的交互,所以可以在一个物理串口上同时实现多个功能。在 PPP 拨号启用时,仍然可以调用 AT 命令,也可以使用 Modem 功能同时支持数据通话。
 
-## 2. CMUX 的实现协议
+## 2. CMUX 协议
 
 ​	多路复用协议提供在单个物理通信通道之上虚拟出多个并行的逻辑通信通道的能力,一般应用于TE(Terminal Equipment)与MS(Mobile Station)之间,TE相当于智能手机的AP端,MS相当于智能手机的MODEM端。多路复用协议的实现效果如图:
 
@@ -56,87 +54,9 @@ GSM 07.10 协议支持
 5. UIH  UIH命令帧/响应帧,相对于 UI 帧只对地址域,控制域和长度域校验
 6. UI  UI命令帧/响应帧
 
-## 3. CMUX 协议的验证平台及验证方法
-
-STM32F407 + Air720H(手动拼接命令测试)
-
-​    使用 AT+CMUX 命令,进入 CMUX 配置功能;测试 CMUX 功能是否正常:
-
-1.  PPP 拨号正常
-2.  AT 命令查询模块信号强度正常
-
-手动发送的 CMUX 命令:
-
-![cmux_data_store](./figures/cmux_data_store.png)
-
-## 4. CMUX 在 RT-Thread 上的适配
-
-#### 4.1 移植的环境与目标
-
-使用 STM32F407 + Air720H 平台,实现 CMUX 功能;
-
-​    目标是做成软件包的形式,软件包的功能是打开后,将通过 cmux 软件包向上虚拟出 vcom1, vcom2, vcom3 以代表 ppp, at, modem 这些接口,向下接管真实物理串口,通过 cmux 协议解析数据以实现正常传输。使用时通过 rt_device_find 查找使用,以实现较大的通用性。
-
-#### 4.2 CMUX 框架图定义和介绍
+#### 2.2 基础介绍
 
-![cmux_frame](./figures/cmux_frame.png)
-
-1. CMUX 属于串口驱动之上,在通信协议 PPP / AT 之下;主要用于 MCU 和通讯模块在不同通道上面进行不同业务的通信及交互功能;
-2. CMUX 分为服务器和客户端部分,服务器与客户端部分实现并不相同;
-3. 我们在移植 CMUX 时,客户端与服务器是两个设备,只需要实现 CMUX 客户端部分即可,服务器由通讯模块提供;
-4. CMUX 是指在一个物理串口上实现多个虚拟串口设备功能,只能实现在一对一设备上,且双方必须同时支持 CMUX(GSM0707 / GSM0710) 协议; 
-
-#### 4.3 CMUX 的移植参考 
-
-基于 [Github](https://github.com/ya-jeks/gsmmux.git) 上 gsmmux 仓库,该仓库是针对 Linux 系统实现的 CMUX 协议支持;
-
-#### 4.3.1 软件包结构
-
-```shell
-cmux
-├───docs 
-│   └───figures                     // 文档使用图片	
-├───inc                             // 头文件
-│   │───gsm
-│   │   └─── cmux_chat.h    
-│   └─── cmux.h       
-├───sample                          // 示例文件
-│   └─── cmux_sample_gsm.c     
-├───src                             // 源码文件
-│   ├───gsm
-│   │   ├─── cmux_chat.c 
-│   │   └─── cmux_gsm.c  
-│   ├─── cmux_utils.c
-│   └─── cmux.c
-├───LICENSE                         // 软件包许可证
-├───README.md                       // 软件包使用说明
-└───SConscript                      // RT-Thread 默认的构建脚本
-```
-
-#### 4.3.2 基础介绍
-
-1. CMUX 的帧结构介绍
-
-   ```c
-   struct cmux_buffer
-   {
-     rt_uint8_t data[CMUX_BUFFER_SIZE];
-     rt_uint8_t *read_point;                          // 用于读取 CMUX 数据的指针
-     rt_uint8_t *write_point;                         // 指向 CMUX 数据区的指针
-     rt_uint8_t *end_point;                           // 指向 CMUX 数据区末尾的指针
-     int flag_found;                                  // 是否找到 0xF9 帧头
-   };
-   
-    struct cmux_frame
-   {
-     rt_uint8_t channel;                             // 地址域
-     rt_uint8_t control;                             // 数据帧类型, SABM,UIH,UA; 控制域
-     int data_length;                                // 数据长度
-     rt_uint8_t *data;                               // 实际数据
-   };
-   ```
-   
-2. CMUX 不同帧类型介绍
+1. CMUX 不同帧类型介绍
 
    ```shell
    // bits: Poll/final, Command/Response, Extension
@@ -158,36 +78,3 @@ cmux
    // basic mode flag for frame start and end
    #define CMUX_HEAD_FLAG (unsigned char)0xF9
    ```
-   
-
-#### 4.3.2 实现
-
-1. 需要实现的结构体
-
-   ```c
-   struct cmux
-   {
-       struct rt_device *dev;                        /* device object */
-       const struct cmux_ops *ops;                   /* cmux device ops interface */
-       struct cmux_buffer *buffer;                   /* cmux buffer */
-       struct cmux_frame *frame;                     /* cmux frame point */
-       rt_thread_t recv_tid;                         /* receive thread point */
-       rt_uint8_t vcom_num;                          /* the cmux port number */
-       struct cmux_vcoms *vcoms;                     /* array */
-   
-       struct rt_event *event;                       /* internal communication */
-   
-       rt_slist_t *list;                             /* cmux list */
-   
-       void *user_data;                              /* reserve */
-   };
-   
-   struct cmux_ops
-   {
-       rt_err_t  *(start)     (struct cmux *obj);
-       rt_err_t  *(stop)      (struct cmux *obj);
-       rt_err_t  *(control)   (struct cmux *obj, int cmd, void *arg);
-   };
-   ```
-   
-