diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/atcmd.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/atcmd.md"
index 30a5669bf1407c05888744c16363a418db23ec62..d6c432b6dbb849572de03e6c974520600579fe9e 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/atcmd.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/atcmd.md"
@@ -1,6 +1,6 @@
# atcmd - 发送AT指令功能
-模块功能:提供发送AT指令的方法,使模组能够通过Python代码发送AT指令。
+该模块提供发送AT指令的方法,使模组能够通过Python代码发送AT指令。
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/cellLocator.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/cellLocator.md"
index d835b8ba17ee6ebde9e1c1de88c7b906e80a0d54..20824fbcb790ae5ebab4da49701170f7189e5ebf 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/cellLocator.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/cellLocator.md"
@@ -1,10 +1,10 @@
# cellLocator - 基站定位
-模块功能: 提供基站定位功能,获取模组经纬度坐标信息。
+该模块提供基站定位功能,获取模组经纬度坐标信息。
->注意:当前仅EC600S/EC600N/EC800N/EC200U/EC600U系列支持该功能。
+>当前仅EC600S/EC600N/EC800N/EC200U/EC600U系列支持该功能。
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/dataCall.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/dataCall.md"
index 1cf22945fafa919da4d0a6b9421d4cb680a28468..4de9d4b07106573370155b966ceda0deb12dbb7e 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/dataCall.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/dataCall.md"
@@ -411,6 +411,8 @@ dataCall.getInfo(profileID, ipType)
>返回值 `(1, 0, [0, 0, '0.0.0.0', '0.0.0.0', '0.0.0.0'])` 表示当前没有拨号或者拨号没有成功。
>
>支持该方法的模组:EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC600M/EC800M/EG810M/EC200A/EC200U/EC600U/EG912U/EG915U/EC600G/EC800G/EC600E/EC800E/BG77/BG95/BC25/BC95系列。
+>
+>由于需要向老版dataCall.getInfo兼容,实际profileID的最大值是大于3的,具体以实际能够查询的profileID为准。
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md"
index 3c2110dfcf6fb60840ef963491b3c03037189fa9..a18300ae5bd80b7969d6095e027d02a3e3e90e67 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md"
@@ -1,10 +1,10 @@
# net - 网络相关功能
-模块功能:该模块包含了模组网络相关的功能,提供配置和查询网络模式信息等接口,比如获取注网状态,设置搜网模式等。
+该模块包含了模组网络相关的功能,提供配置和查询网络模式信息等接口,比如获取注网状态,设置搜网模式等。
->注意: 建议用户使用不同运营商的SIM卡时,则配置对应运营商的APN信息;如果不配置或者配置错误,可能会导致模组无法注网。用户具体如何配置APN信息,参考`dataCall.setPDPContext`方法。
+>建议用户使用不同运营商的SIM卡时,则配置对应运营商的APN信息;如果不配置或者配置错误,可能会导致模组无法注网。用户具体如何配置APN信息,参考`dataCall.setPDPContext`方法。
@@ -43,20 +43,11 @@ net.csqQueryPoll()
### `net.getCellInfo`
```python
-net.getCellInfo([sinrEnable])
+net.getCellInfo()
```
该方法用于获取邻近小区的信息。
-**参数描述:**
-
-* `sinrEnable` - 使能是否获取sinr数值,整型值,可选参数,取值范围见下表:
-
-| 取值 | 含义 |
-|-----| ------------- |
-| 0 | 不获取sinr数值 |
-| 1 | 获取sinr数值 |
-
**返回值描述:**
失败返回整型值`-1`,成功返回包含三种网络系统`(GSM、UMTS、LTE)`的信息的list,如果对应网络系统信息为空,则返回空的List。格式和说明如下:
@@ -103,15 +94,11 @@ net.getCellInfo([sinrEnable])
| `earfcn` | 无线频道编号,范围 0 ~ 65535 |
| `rssi` | LTE网络下,rssi:表示接收的所有信号强度,单位dBm,范围 -140 ~ -44 dBm
注:目前除BC25系列和BG77/BG95系列,其它平台均无法获取rssi,使用RSRP代替:
RSRP:表示接收到的有效信号强度,单位dBm,范围 -140 ~ -44 dBm |
| `rsrq` |LTE网络参考信号接收质量,范围 -20 ~ -3
注:理论上rsrq的范围应该是-19.5 ~ -3,但由于计算方法问题,目前能给出的是-20 ~ -3
目前仅BC25系列、BG77/BG95系列和EC600E/EC800E系列获取该参数有意义,其它平台该参数无意义|
-| `sinr` |信噪比(目前仅BC25系列和EC600E/EC800E系列支持获取该参数)范围-10 ~ 40 |
->注意:
+>该接口搜小区时会一直阻塞,一般是3-5秒,在无信号的地方会更长
>
->* 该接口搜小区时会一直阻塞,一般是3-5秒,在无信号的地方会更长
->* `sinrEnable`为可选参,不支持的平台可不写,不写默认不获取sinr
->* 仅BC25/EC600E/EC800E系列支持获取sinr,其余模组型号均不支持
@@ -123,11 +110,6 @@ net.getCellInfo([sinrEnable])
([], [], [(0, 232301375, 1120, 17, 378, 26909, 1850, -66, -8), (3, 110110494, 1120, 17, 10, 26909, 2452, -87, -17), (3, 94542859, 1120, 1, 465, 56848, 1650, -75, -10),
(3, 94472037, 1120, 1, 369, 56848, 3745, -84, -20)])
-# BC25
->>> net.getCellInfo(1)
-([], [], [(0, 17104243, 460, 4, 169, 19472, 3688, -56, -10, -3)])
->>> net.getCellInfo(0)
-([], [], [(0, 17104243, 460, 4, 169, 19472, 3688, -75, -12)])
>>> net.getCellInfo()
([], [], [(0, 17104243, 460, 4, 121, 19472, 3688, -76, -15)])
```
@@ -172,7 +154,7 @@ net.getConfig()
->注意:BC25系列不支持此方法;
+>BC25系列不支持此方法;
>
>BG95-M1系列仅支持CATM制式;
>
@@ -212,8 +194,6 @@ net.setConfig(mode [, roaming])
->注意:
->
>* roaming为可选参数,不支持的平台,该参数可不写
>* BC25系列不支持此方法
>* EC200U/EC600U/EG915U系列模组不支持漫游参数配置,且仅支持设置网络制式0/6/8
@@ -345,8 +325,6 @@ net.getSignal([sinrEnable])
->注意:
->
>* `sinrEnable`为可选参,不支持的平台可不写,不写默认不获取sinr
>* BC25系列不支持获取sinr,其余模组型号均支持
@@ -492,7 +470,7 @@ net.getState()
-> 注意:BG77/BG95系列参照下表
+> BG77/BG95系列参照下表
| 值 | 说明 |
| ---- | ------------------ |
@@ -633,7 +611,7 @@ net.getMcc()
-> 注意:EC100Y/EC600S/EC600N/EC600E/EC800E/EC200A/EC600M/EC800M系列的模组,该值是用十六进制来表示,比如下面示例中的十进制数1120,十六进制即0x460,表示移动设备国家代码460,其他型号模组,该值直接用十进制表示,比如移动设备国家代码460,就是用十进制的460来表示。
+> EC100Y/EC600S/EC600N/EC600E/EC800E/EC200A/EC600M/EC800M系列的模组,该值是用十六进制来表示,比如下面示例中的十进制数1120,十六进制即0x460,表示移动设备国家代码460,其他型号模组,该值直接用十进制表示,比如移动设备国家代码460,就是用十进制的460来表示。
@@ -661,7 +639,7 @@ net.getServingMcc()
-> 注意:EC100Y/EC600S/EC600N系列的模组,该值是用十六进制来表示,比如下面示例中的十进制数1120,十六进制即0x460,表示移动设备国家代码460,其他型号模组,该值直接用十进制表示,比如移动设备国家代码460,就是用十进制的460来表示。
+> EC100Y/EC600S/EC600N系列的模组,该值是用十六进制来表示,比如下面示例中的十进制数1120,十六进制即0x460,表示移动设备国家代码460,其他型号模组,该值直接用十进制表示,比如移动设备国家代码460,就是用十进制的460来表示。
@@ -850,7 +828,6 @@ net.setBand(netRat, gsmBand, bandTuple)
->注意:
>* 当前可支持模组型号:BG95系列/EG912NENAA
>* BG95不支持设置上述模式1(LTE)下的`band`
>* EG912NENAA仅支持上述模式0(GSM)和模式1(LTE)
@@ -997,7 +974,6 @@ net.getBand(netRat)
->注意:
>* 当前可支持模组型号:BG95系列/EG912NENAA
>* BG95不支持设置上述模式1(LTE)下的`band`
>* EG912NENAA仅支持上述模式0(GSM)和模式1(LTE)
@@ -1028,7 +1004,7 @@ net.bandRst()
->注意:当前可支持模组型号:EG912NENAA
+>当前可支持模组型号:EG912NENAA
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sim.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sim.md"
index 15532642c99dc0785ac94da983ecbdd241d3558f..a6d60d2df574dfb88521488fb2fcfceef3b4d9f5 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sim.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sim.md"
@@ -1,10 +1,10 @@
# sim - SIM卡功能
-模块功能:提供sim卡相关功能的接口,如查询sim卡状态、iccid、imsi、电话号码等。
+该模块提供sim卡相关功能的接口,如查询sim卡状态、iccid、imsi、电话号码等。
-> 注意:能成功获取IMSI、ICCID、电话号码的前提是SIM卡状态为1,可通过sim.getStatus()查询。
+> 能成功获取IMSI、ICCID、电话号码的前提是SIM卡状态为1,可通过sim.getStatus()查询。
@@ -31,7 +31,7 @@ sim.genericAccess(simId, cmd)
-> 注意:仅EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
+> 仅EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
@@ -112,7 +112,7 @@ sim.getPhoneNumber()
->注意:BC25系列不支持此方法
+>BC25系列不支持此方法
@@ -354,8 +354,6 @@ sim.readPhonebook(storage, start, end, username)
->注意:
->
>- EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC600MCNLE/EC600MCNLA/EC800MCNLA/EC800MCNLE/EC800MCNGA/EG810M/EC200A系列支持此方法。
>
>- 按username进行匹配时,并不是按完整的单词进行匹配,只要电话簿中已有记录的name是以username开头,那么就会匹配上。
@@ -400,7 +398,7 @@ sim.writePhonebook(storage, index, username, number)
-> 注意:EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC600MCNLE/EC600MCNLA/EC800MCNLA/EC800MCNLE/EC800MCNGA/EG810M/EC200A系列支持此方法。
+> EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC600MCNLE/EC600MCNLA/EC800MCNLA/EC800MCNLE/EC800MCNGA/EG810M/EC200A系列支持此方法。
@@ -435,7 +433,7 @@ SIM卡热插拔开关:用于设置SIM卡热插拔相关配置。
-> 注意:BC25系列不支持此方法。
+> BC25系列不支持此方法。
@@ -471,7 +469,7 @@ sim.getSimDet()
->注意:BC25系列不支持此方法。
+>BC25系列不支持此方法。
@@ -503,7 +501,7 @@ sim.getCurSimid()
->注意:支持该方法的模组:EC600M/EC800M系列。
+>支持该方法的模组:EC600M/EC800M系列。
@@ -535,7 +533,7 @@ sim.switchCard(simId)
->注意:支持该方法的模组:EC600M/EC800M系列。
+>支持该方法的模组:EC600M/EC800M系列。
@@ -582,7 +580,7 @@ def usrFun(args):
-> 注意:BC25系列不支持此方法。
+> BC25系列不支持此方法。
@@ -629,7 +627,7 @@ def usrFun(args):
> 支持该方法的模组:EC600M/EC800M系列。
>
-> 注意:以下几点:
1、目标卡不存在或者目标卡状态异常;
2、目标卡是当前卡;
以上情况切卡方法`sim.switchCard`直接返回-1,不触发此接口设置的回调函数。
+> 注意以下几点:
1、目标卡不存在或者目标卡状态异常;
2、目标卡是当前卡;
以上情况切卡方法`sim.switchCard`直接返回-1,不触发此接口设置的回调函数。
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sms.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sms.md"
index bcf9a70fa75e10c1e72c86fcc3cdcdb4a73ae245..15f619839758a8f5ceb7e756443be5bda8319a2c 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sms.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/sms.md"
@@ -1,10 +1,10 @@
# sms - 短信功能
-模块功能:该模块提供短信功能相关方法,包括读取、发送、删除短信等方法。
+该模块提供短信功能相关方法,包括读取、发送、删除短信等方法。
-> 注意:BC25/EC600M系列不支持此功能。
+> BC25/EC600M系列不支持此功能。
@@ -35,7 +35,7 @@ sms.sendTextMsg(phoneNumber, msg, codeMode)
-> 注意:仅以下系列支持长短信:
+> 仅以下系列支持长短信:
>
> EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC800M/EG810M/EC200A系列支持6条正常短信长度;
>
@@ -81,7 +81,7 @@ sms.sendPduMsg(phoneNumber, msg, codeMode)
-> 注意:仅以下系列支持长短信:
+> 仅以下系列支持长短信:
>
> EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC600M/EC800M/EG810M/EC200A系列支持6条正常短信长度;
>
@@ -128,7 +128,7 @@ sms.deleteMsg(index [, delmode])
-> 注意:BC25/EC800G不支持可选参数的使用
+> BC25/EC800G不支持可选参数的使用
@@ -174,7 +174,7 @@ sms.setSaveLoc(mem1, mem2, mem3)
-> 注意:不同系列短信默认存储空间有差异,用户根据自己的需求进行设置。
+> 不同系列短信默认存储空间有差异,用户根据自己的需求进行设置。
>
> EC100Y/EC200N/EC600N/EC600S/EC800N/EG912N/EG915N/EC800M/EG810M/EC200A系列如果要改变接收消息的存储位置,需要同时设定mem2 & mem3;EC200U/EC600U/EG912U/EG915U/EC600G/EC800G系列只需设定mem3即可
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/voiceCall.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/voiceCall.md"
index 6cceb72b344e1f9630300b536d273288bebc3bb2..be185d6a62c9234fa547d2b6ff9525b37de71264 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/voiceCall.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/voiceCall.md"
@@ -1,12 +1,11 @@
# voiceCall - 电话功能
-模块功能:该模块提供电话功能相关接口。
+该模块提供电话功能相关接口。
->注意:
>* 支持voiceCall功能的模组:
-> EC100Y系列:EC100YCN_AA
+>EC100Y系列:EC100YCN_AA
> EC200N系列:EC200NCN_AA/EC200NCN_AC/EC200NCN_LA
> EC600N系列:EC600NCN_AA/EC600NCN_LC/EC600NCN_LD/EC600NCN_LF
> EC600S系列:EC600SCN_LA
@@ -16,7 +15,7 @@
> EC200U系列:EC200UAU_AB/EC200UCN_AA/EC200UEU_AA/EC200UEU_AB
> EC600U系列:EC600CEU_AB/EG912UGL_AA/EG915UEU_AB
> BC25/EC600G/EC800G/BG95/BG77系列模组不支持voiceCall功能。
->* 其他系列模组需要定制版本才能支持voiceCall功能。
+> * 其他系列模组需要定制版本才能支持voiceCall功能。
@@ -193,8 +192,6 @@ def voice_callback(args):
->注意:
->
>* 1、以上仅适用2021-09-09之后发布的支持语音通话的版本
>* 2、QPY_V0004_EC600N_CNLC_FW_VOLTE(2021-09-09发布)之前发布的版本都按照以下规则使用voiceCall
@@ -246,7 +243,7 @@ voiceCall.setAutoCancel(enable)
->注意:EC200AAU_HA/EC200ACN_DA/EC200ACN_HA/EC200ACN_LA/EC200AEU_HA系列模组支持该功能
+>EC200AAU_HA/EC200ACN_DA/EC200ACN_HA/EC200ACN_LA/EC200AEU_HA系列模组支持该功能
@@ -319,7 +316,7 @@ voiceCall.startDtmf(dtmf, duration)
->注意:该方法仅在语音通话过程中使用生效
+>该方法仅在语音通话过程中使用生效
@@ -351,7 +348,7 @@ voiceCall.dtmfDetEnable(enable)
->注意:支持voiceCall功能的模组型号中,EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
+>支持voiceCall功能的模组型号中,EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
@@ -382,7 +379,7 @@ def dtmfFun(args):
->注意:支持voiceCall功能的模组型号中,EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
+>支持voiceCall功能的模组型号中,EC600N/EC600S/EC800N/EG912N/EG915N系列支持该方法。
@@ -641,7 +638,6 @@ voiceCall.readRecordStream(readBuf, bufLen)
->注意:
>* 录音流第一包数据均是对应格式文件的文件头
>* wav格式录音流第一包数据不包含文件大小,需结束录音后自行计算
@@ -689,7 +685,6 @@ def recordStreamCallback(args):
->注意:
>* 录音流第一包数据均是对应格式文件的文件头
>* wav格式录音流第一包数据不包含文件大小,需结束录音后自行计算
diff --git "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/wifilocator.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/wifilocator.md"
index 237cf8779b7f11750568583f171ae23fd4c523f3..37e7206a74bc5ec2af200015f6250c6be1893f4b 100644
--- "a/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/wifilocator.md"
+++ "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/wifilocator.md"
@@ -1,10 +1,10 @@
# class wifilocator - WIFI定位
-模块功能:提供WIFI定位功能的类,获取模组经纬度坐标信息。
+该模块提供WIFI定位功能的类,获取模组经纬度坐标信息。
-> 注意:当前仅EC600S/EC600N/EC800N/EC200U/EC600U系列支持该功能。
+> 当前仅EC600S/EC600N/EC800N/EC200U/EC600U系列支持该功能。
diff --git a/docs/Application_guide/zh/network/cellLocator.md b/docs/Application_guide/zh/network/cellLocator.md
new file mode 100644
index 0000000000000000000000000000000000000000..5bf561a459371f8d7978938f16aa20da6d9e4763
--- /dev/null
+++ b/docs/Application_guide/zh/network/cellLocator.md
@@ -0,0 +1,49 @@
+# 基站定位
+
+## 什么是基站定位
+
+基站定位是一种利用移动通信基站的信号信息确定设备位置的技术。在移动通信网络中,基站是无线信号的发射和接收站点,每个基站都有一个唯一标识码,同时可以测量设备与基站之间的信号强度和时间延迟等信息。通过对设备与多个基站之间的信号信息进行比对和计算,就可以确定设备大致的位置。基站定位技术广泛应用于车辆追踪、物流管理、紧急救援等领域。与GPS等卫星定位技术相比,基站定位更适用于城市等密集建筑区域,但精度相对较低。
+
+#### 基站定位分类
+
+基站定位可以分为以下几类:
+
+1、单纯的基站定位。
+
+2、基站和WiFi混合定位。
+
+本文档主要介绍如何 QuecPython 单纯的基站定位功能,WiFi定位可查看WiFi定位应用文档,通过本文你将了解到 QuecPython 基站定位使用方法。
+
+
+
+## 怎么使用基站定位功能
+
+### 硬件设计
+
+基站定位主要是数据通道向服务器获取位置信息实现的,除前提条件模块需要组网成功外无需其他外围硬件支持。
+
+### 软件应用
+
+#### 使用流程
+
+在使用基站定位服务之前,首先需要建立数据通道(拨号成功,能通过dataCall.getInfo(1,0)查询到ip),基站定位服务基于这个数据通道向服务器获取位置信息。若在其他任务中已经建立了数据通道,可以跳过建立数据通道的步骤。
+
+建立好数据通道之后,调用cellLocator.getLocation可查询当前UE的经纬度坐标。
+
+
+
+> 1、 token需要向相关部门提交申请获取。
+>
+> 2、基站定位服务访问不可太过频繁,两次定位间隔最好保持10s以上。
+
+
+
+#### 软件实现示例
+
+```Python
+>>> import cellLocator
+>>> cellLocator.getLocation("www.queclocator.com", 80, "xxxxxxxxxxxxxxxx", 8, 1)
+(117.1138, 31.82279, 550)
+# 上面使用的密钥"xxxxxxxxxxxxxxxx"指代token,具体需要向移远申请
+```
+
diff --git a/docs/Application_guide/zh/network/datacall.md b/docs/Application_guide/zh/network/datacall.md
index b014096408528485d933389627df508644e9a83f..34122dea041d4308031e1ac937add4737343ebf1 100644
--- a/docs/Application_guide/zh/network/datacall.md
+++ b/docs/Application_guide/zh/network/datacall.md
@@ -1,5 +1,7 @@
# 数据拨号
+数据拨号是指通过调用通信模块的拨号接口,实现将嵌入式设备连接到互联网的过程。在进行数据拨号之前,需要先配置通信模块的网络参数,如APN、用户名、密码等,以便建立连接时使用。
+
## 引言
移远通信LTE Standard 模块支持QuecPython方案,本文档主要描述QuecPython模块无线数据业务的建立过程,即数据拨号的过程。本文主要介绍数据拨号功能的实际应用,包含开机自动拨号、拨号重连以及手动拨号的基础的用法和注意事项。同时介绍了拨号功能在常见场景中的使用。
diff --git a/docs/Application_guide/zh/network/esim.md b/docs/Application_guide/zh/network/esim.md
new file mode 100644
index 0000000000000000000000000000000000000000..b72415985a4d1df5413eba3eee27df0ea7d443b3
--- /dev/null
+++ b/docs/Application_guide/zh/network/esim.md
@@ -0,0 +1,197 @@
+# eSIM LPA
+
+## 什么是eSIM LPA
+
+eSIM即嵌入式SIM,也叫eUICC,支持空中写号,可远程动态切换码号;它是SIM卡技术的升级,是由GSMA开发的一个新标准。
+与传统可插拔的SIM卡不同,eSIM一般没有实体SIM卡,而是通过一个嵌入到设备中的芯片(eUICC),下载运营商配置文件并激活运营商服务。详细点说,eSIM是通过使用远程SIM卡配置来激活的,即通过使用远程SIM卡配置平台,通过使用标准化、安全和远程的“空中传送”过程,来完成eSIM配置文件的下载、安装和激活。
+eSIM这种虚拟化和设备集成化的特性,让用户不必来回插拔传统SIM卡,SIM卡号码的切换也将引来全新的用户体验,用户直接通过与终端交互,通过APP或者云端,即可在全球范围内将终端智能设备连接到所选择的当地网络,且可动态切换,使设备可以始终处于优质网速中。
+
+对于终端用户而言,Quecpython eSIM方案整体架构可以理解为由DP+服务器,设备提供的LPA以及eSIM组成,我们UE在此充当的就是LPA的功能。
+
+## 怎么使用eSIM
+
+### 硬件设计
+
+eSIM功能主要为DP+服务器与eSIM通过UE来进行的内部交互,除前提条件模块需要组网成功外无需其他外围硬件支持。
+
+### 软件应用
+
+目前GSMA制定了两套eSIM标准方案,分别是针对物联网行业的M2M方案——M2M eSIM;以及直接面向最终用户的消费者解决方案——Consumer eSIM。
+M2M方案需要依赖短信功能进行profile的下载,而消费者解决方案依赖于HTTPS下载。故M2M方案的实施eSIM芯片中必须预置有种子号;消费者解决方案的实施只需要设备能连接网络即可,但目前QuecPython支持的模组型号只能通过蜂窝数据连接网络,所以使用消费者解决方案时也需要预置种子号保证能正常连接网络。
+
+下面我们分:`eSIM空中写号流程`;`OTA`;`软件设计`三个部分来分别介绍Quecpython eSIM LPA方案。
+
+#### eSIM空中写号流程
+
+1、通常MCU/End user通过二维码获取activation code并提供给终端
+
+2、模块使用esim中的种子号的网络与DP+服务器进行交互
+
+3、从服务器下载profile到esim中(OTA)
+
+#### OTA
+
+1、ESIM和DP+服务器互相认证
+
+2、从DP+ 服务器下载profile安装包
+
+3、安装profile到eSIM并上报结果给DP+ 服务器
+
+#### 软件设计
+
+注意:执行该脚本之前请关闭开机自动拨号逻辑
+
+```Python
+import utime
+import net
+import dataCall
+import sim
+from sim import esim
+from machine import UART
+from queue import Queue
+
+OTAResult_q = None
+
+def check_sim():
+ repeat_count = 10
+ while repeat_count >= 0:
+ sim_state = sim.getStatus()
+ if sim_state == 1:
+ print('sim is ready!')
+ break;
+ else:
+ utime.sleep_ms(500)
+ repeat_count -= 1
+
+ if repeat_count < 0:
+ return -1
+ #else:
+ #return 0
+
+ iccid = sim.getIccid()
+ print('iccid:{}'.format(iccid))
+
+ eid = esim.getEid()
+ print("eUICC id:{}".format(eid))
+ if eid == '' or eid == None:
+ print('get euicc id failed!')
+ return -1
+
+ profile_list = esim.getProfileInfo(1)
+ print(profile_list)
+ if profile_list[0] == 0:
+ print('there is no profileinfo in this esim!')
+ return -1
+ return 0
+
+def init_esim():
+ #
+ print('Please input the ipVersion of this esim:')
+ ipVersion=input()
+ print('Please input the APN of this esim:')
+ apn=input()
+ print('Please input the userName of this esim:')
+ userName=input()
+ print('Please input the passWord of this esim:')
+ passWord=input()
+ print('Please input the authType of this esim:')
+ authType=input()
+ net.setApn(1,int(ipVersion),apn,userName,passWord,int(authType),0)
+ #
+ print('Please input the net config:')
+ config=input()
+ net.setConfig(int(config))
+ #
+ net.setModemFun(0)
+ repeat_count = 5
+ while repeat_count >= 0:
+ net_state = net.getState() #([11, 26909, 232301323, 7, 0, 466], [0, 26909, 232301323, 7, 0, 0])
+ if net_state == -1 or (net_state[1][0] != 1 and net_state[1][0] != 5):
+ net.setModemFun(1)
+ repeat_count = 1200
+ while repeat_count >= 0:
+ net_state = net.getState()
+ if net_state[1][0] == 1 or net_state[1][0] == 5:
+ print('success to reg network...')
+ break;
+ else:
+ utime.sleep_ms(500)
+ repeat_count -= 1
+ print('wait reg network...')
+
+ if repeat_count >= 0:
+ return 0
+ else:
+ print('failed to reg network,please check pdn info and netconfig!')
+ return -1
+ else:
+ utime.sleep_ms(100)
+ repeat_count -= 1
+ if repeat_count < 0:
+ return -1
+ return 0
+
+def cb(args):
+ global OTAResult_q
+ print('OTA result:{}'.format(args))
+ OTAResult_q.put(args)
+
+def esim_lpa():
+ global OTAResult_q
+ esim.setCallback(cb)
+ print('please input the activationCode:')
+ activationCode = input()
+ print('please input the confirmationCode:')
+ confirmationCode = input()
+ ret = esim.profileOTA(activationCode, confirmationCode)
+ if ret == 0:
+ result = OTAResult_q.get()
+ if result == 0:
+ print('success to download and install the profile!')
+ while True:
+ print('Please select the action you want<0:enable profile 1:exit>')
+ handlerType = input()
+ if int(handlerType) == 1:
+ return 0
+ elif int(handlerType) == 0:
+ print('please input the iccid:')
+ iccid = input()
+ ret = esim.profileHandle(int(handlerType), iccid)
+ if ret != 0:
+ print('enable profile failed!')
+ return -1
+ print('enable profile succeed!')
+ sim_state = sim.getStatus()
+ print('sim state:{}'.format(sim_state))
+ iccid = sim.getIccid()
+ print('iccid:{}'.format(iccid))
+ profile_list = esim.getProfileInfo(1)
+ print('profile_list:{}'.format(profile_list))
+ break
+ else:
+ print('invalid input')
+ utime.sleep_ms(100)
+ else:
+ print('failed to download and install the profile!')
+ return -1
+ else:
+ print('failed to download and install the profile!')
+ return -1
+
+if __name__ == '__main__':
+ OTAResult_q = Queue(maxsize=100)
+ ret = check_sim()
+ if ret == 0:
+ ret = init_esim()
+ if ret == 0:
+ pdninfo = net.getApn(1,0)
+ print(pdninfo)
+ dataCall.setAsynMode(0)
+ ret = dataCall.start(1,int(pdninfo[0]), pdninfo[1], pdninfo[2], pdninfo[3], int(pdninfo[4]))
+ if ret == 0:
+ esim_lpa()
+```
+
+## eSIM OTA测试
+
+成功执行以上脚本之后,默认已经成功从DP+服务器下载并安装profile到eSIM中,并且使能了该profile,如果该profile是可用的,我们可以重启模块,查询当前注网状态,以及iccid,验证是否写号成功
diff --git a/docs/Application_guide/zh/network/sim.md b/docs/Application_guide/zh/network/sim.md
new file mode 100644
index 0000000000000000000000000000000000000000..9005a5ba871d49c4d3334bc0554aa3afcfd97c68
--- /dev/null
+++ b/docs/Application_guide/zh/network/sim.md
@@ -0,0 +1,92 @@
+# SIM卡
+
+## 什么是SIM卡
+
+Subscriber Identity Module(简称SIM卡)是一种智能卡,主要用于存储移动用户的身份信息和相关密钥,并实现对移动通信网络的认证和授权。SIM卡通常由芯片、封装材料和金属接点等组成,可以插入手机或其他移动终端中使用。 SIM卡的主要功能是存储移动用户的身份信息和相关密钥,包括手机号码、用户身份标识、IMSI号码、PIN码、PUK码、加密密钥等。通过这些信息,SIM卡可以向移动通信网络提供用户身份认证和授权,以保证通信网络的安全性。 此外,SIM卡还可以存储联系人信息、短信、通话记录、语音信箱号码、网络参数等相关信息,为用户提供各种通信和管理功能,方便用户的日常生活和工作。
+
+本文档主要介绍如何使用 QuecPython SIM卡功能,通过本文你将了解到 QuecPython SIM卡的设置及使用方法。
+
+## 怎么使用SIM卡功能
+
+### 硬件设计
+
+SIM卡功能主要是实体SIM卡通过UE来进行交互,除前提条件模块需要组网成功外无需其他外围硬件支持。
+
+### 软件应用
+
+#### 已实现功能
+
+SIM卡是具有以下功能和应用:
+
+1. 身份认证:SIM卡中存储了用户的身份信息和网络访问权限,可以对用户进行身份认证和授权,以保证通信网络的安全性。
+2. 存储联系人:SIM卡可以存储联系人信息,包括姓名、电话号码等,方便用户进行通信和联系。
+3. 短信功能:SIM卡可以接收和发送短信,方便用户进行信息交流和通信。
+4. 存储通话记录:SIM卡可以存储用户的通话记录,包括通话时间、通话时长等,方便用户进行通话管理和统计。
+5. 存储语音信箱号码:SIM卡可以存储语音信箱号码,方便用户使用语音信箱服务。
+6. 存储网络参数:SIM卡可以存储网络参数,包括APN、用户名、密码等,方便用户进行数据拨号和网络连接。
+7. 存储安全信息:SIM卡可以存储加密密钥、PIN码等安全信息,以保证通信网络的安全性。
+
+在QuecPython中这些功能的接口主要在[sim](/../../../API_reference/zh/QuecPython类库/sim.html),[sms](/../../../API_reference/zh/QuecPython类库/sms.html)和[ voiceCall](/../../../API_reference/zh/QuecPython类库/ voiceCall.html)中。
+
+ 1. SIM卡信息和状态查询:包括获取sim卡的IMSI,ICCID,电话号码和SIM当前状态。
+ 2. 电话簿功能:可以存储联系人信息,包括姓名、电话号码等。
+ 3. 短信功能:具体见[sms](./sms.md)短信应用指导。
+ 4. 电话功能:具体见[ voiceCall](./sms.md)电话应用指导。
+ 5. 存储安全信息功能:包括PIN码验证,解锁等。
+ 6. 其它功能:如切卡、热插拔和注册回调功能。
+
+#### 软件实现示例
+
+```python
+>>> import sim
+>>> sim.getImsi() # 获取sim卡的IMSI
+'460105466870381'
+>>> sim.getIccid() # 获取sim卡的ICCID
+'89860390845513443049'
+>>> sim.getPhoneNumber() # 获取sim卡的电话号码
+'+8618166328752'
+>>> sim.getStatus() # 查询当前SIM卡状态 0:SIM卡不存在/被移除,1:SIM已经准备好,2:SIM卡已锁定
+1
+>>> sim.writePhonebook(9, 1, 'Tom', '18144786859') # 写电话簿
+0
+>>> sim.readPhonebook(9, 1, 4, "") # 读电话簿
+(4,[(1,'Tom','15544272539'),(2,'Pony','15544272539'),(3,'Jay','18144786859'),(4,'Pondy','15544282538')])
+>>> sim.readPhonebook(9, 0, 0, "Tom")
+(1, [(1, 'Tom', '18144786859')])
+>>> sim.readPhonebook(9, 0, 0, "Pony")
+(1, [(2, 'Pony', '17744444444')])
+>>> sim.readPhonebook(9, 0, 0, "Pon") # 关键字查询电话簿
+(2, [(2, 'Pony', '17744444444'),(4,'Pondy','15544282538')])
+>>> sim.enablePin("1234") # 开启PIN码验证
+0
+>>> sim.verifyPin("1234") # PIN码验证
+0
+>>> sim.disablePin("1234") # 取消PIN码验证。
+0
+>>> sim.changePin("1234", "4321") # 于更改sim卡PIN码。
+0
+>>> sim.unblockPin("12345678", "0000") # SIM卡解锁:当多次输入PIN码错误需要用PUK码解锁
+0
+>>> sim.setSimDet(1, 0) # 开启SIM卡热插拔, 1表示开启
+0
+>>> sim.getSimDet() # 查询热插拔相关配置
+(1, 0)
+>>> sim.getCurSimid() # 获取当前卡,当前是卡1
+0
+>>> sim.switchCard(1) # 切到卡2
+0
+>>> sim.getCurSimid() # 获取当前卡,成功切到卡2
+1
+# 热插拔 注册监听回调函数
+def usrCallback(args):
+ simstates = args
+ print('sim states:{}'.format(simstates))
+sim.setCallback(usrCallback)
+
+# SIM卡切卡状态 注册监听回调函数
+def usrCallback(args):
+ switchcard_state = args
+ print('sim switchcard states:{}'.format(switchcard_state))
+sim.setSwitchcardCallback(usrCallback)
+```
+
diff --git a/docs/Application_guide/zh/network/sms.md b/docs/Application_guide/zh/network/sms.md
new file mode 100644
index 0000000000000000000000000000000000000000..ad245b26384d1e489194fd509e15be937c6ea58c
--- /dev/null
+++ b/docs/Application_guide/zh/network/sms.md
@@ -0,0 +1,92 @@
+# 短信
+
+## 什么是短信
+
+短信(Short Message Service)是一种通过移动通信网络传输文字信息的服务。短信可以用于发送文字、数字、符号等信息,每条短信的长度一般为160个字符。短信可以用于个人通信、商业宣传、政府通知等多种场合。短信服务通常需要用户购买短信套餐或者按条计费。
+
+本文档主要介绍如何使用 QuecPython 短信功能,通过本文你将了解到 QuecPython 短信的设置及使用方法。
+
+#### 什么是PUD短信
+
+PDU(Protocol Data Unit)短信是一种短信传输的编码格式,常用于GSM网络和3G网络中。相对于常见的文本格式短信(也称为ASCII短信),PDU短信可以在同样长度的情况下携带更多的信息。PDU短信包含多个字段,例如消息中心号码、目标号码、短信编码方式、短信内容等。
+
+QuecPython 短信功能支持PDU短信的生成和解析。
+
+## 怎么使用短信功能
+
+### 硬件设计
+
+短信功能主要是实体SIM卡通过UE来进行交互,除前提条件模块需要组网成功外无需其他外围硬件支持。
+
+### 软件应用
+
+#### 已实现功能
+
+短信功能是移动通信网络中的一种基本服务,它可以实现文字、图片、音频等多种信息的快速传输和交流。
+
+在QuecPython中短信功能的接口主要在[sms](/../../../API_reference/zh/QuecPython类库/sms.html)中。
+
+下面是QuecPython短信功能的应用说明:
+
+ 1. 短信发送:用户可以通过UE,向其他用户发送文字信息,支持发送TEXT类型的消息和PDU类型的消息。
+ 2. 短信接收:用户可以接收来自其他用户或服务提供商发送的短信信息,包括广告信息、验证码等,支持PDU方式和TEXT方式。
+ 3. 短信存储:UE可以将短信保存在本地,方便用户进行查看和管理,包括设置短信存储位置,获取短信数量;查看发送、删除和接收的短信。
+ 4. 其它功能:如删除短信、PDU短信解析、短信中心号码配置、注册监听回调函数等
+
+#### 软件实现示例
+
+```Python
+>>> import sms
+# 发送TEXT短信
+>>> sms.sendTextMsg('18158626517', '这是一条中文测试短信!', 'UCS2')
+0
+>>> sms.sendTextMsg('18158626517', 'Hello, world.', 'GSM')
+0
+>>> sms.sendTextMsg('18158626517', '这是一条夹杂中文与英文的测试短信,hello world!', 'UCS2')
+0
+# 发送PDU短信
+>>> sms.sendPduMsg('18158626517', 'send pdu msg by GSM mode.', 'GSM')
+0
+>>> sms.sendPduMsg('18158626517', 'send pdu msg by UCS2 mode.', 'UCS2')
+0
+>>> sms.sendPduMsg('18158626517', '这是一条中文测试短信!通过PDU-UCS2模式', 'UCS2')
+0
+# 删除短信
+>>> sms.deleteMsg(2) #删除索引号为2的那一条短信
+0
+>>> sms.deleteMsg(1,4) #删除所有短信
+0
+# 获取短信数量
+>>> sms.getMsgNums() # 执行本行前,先发送一条短信到模块
+1
+# 查询短信存储位置
+>>> sms.getSaveLoc()
+(['SM', 2, 50], ['SM', 2, 50], ['SM', 2, 50])
+# 设置短信存储位置
+>>> sms.setSaveLoc('SM','ME','MT')
+0
+>>> sms.getSaveLoc()
+(['SM', 2, 50], ['ME', 14, 180], ['MT', 2, 50])
+>>> sms.sendPduMsg('+8618226172342', '123456789aa', 'GSM') # 自己给自己发送一条短信
+# 以TEXT方式获取短信内容
+>>> sms.searchTextMsg(0)
+('+8618226172342', '123456789aa', 22)
+# 以PDU方式获取短信内容
+>>> sms.searchPduMsg(0) # 下面PDU格式短信需要解码后才能正常显示短信内容
+'0891683110305005F0240BA19169256015F70000022141013044230B31D98C56B3DD70B97018'
+>>> sms.getPduLength(sms.searchPduMsg(0)) #注意,是获取PDU短信长度,不是上面字符串的长度
+20
+# 解析PDU短信内容
+>>>sms.decodePdu('0891683110305005F0240BA19169256015F70000022141013044230B31D98C56B3DD70B97018',20)
+('+8618226172342', '123456789aa', '2021-07-13 09:34:44', 40)
+# 获取短信中心号码
+>>> sms.getCenterAddr()
+'+8613800551500'
+# 注册监听收到短信回调函数
+def cb(args):
+ index = args[1]
+ storage = args[2]
+ print('New message! storage:{},index:{}'.format(storage, index))
+sms.setCallback(cb)
+```
+