From f21a9bfe5e65ce2ad1cf471469b26f3540da9f47 Mon Sep 17 00:00:00 2001 From: "Rich.wu" Date: Fri, 24 Mar 2023 15:27:00 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat=20(network):=20cellLocator/sim/sms?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=8C=87=E5=AF=BC=E6=8F=90=E4=BA=A4=EF=BC=8C?= =?UTF-8?q?dataCall=E5=BA=94=E7=94=A8=E6=96=87=E6=A1=A3=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 是 ######################################################################################## # # # 示例: # # # # fix (network): 重复创建并关闭socket一定次数后,无法再次创建socket。 # # # # 1. 调用select接口并在其它线程调用socket.close()时,socket引用计数没有自减, # # 由于socket总数(即引用计数)有上限,导致创建一定数量的socket无法再次创建socket。 # # # # 2. 调用socket.close()释放资源时,将引用计数自减,及时释放出被占用的资源,修复该问题。# # # # 固件版本:EC600MCNLAR02_QPY # # # # 是否需要文案翻译: 是 # # # ######################################################################################## # # # 说明: # # # # <提交类型> 用于说明提交的类型,一般有以下几种: # # - feat: 新增feature。 # # - fix: 修复bug。 # # - docs: 仅仅修改了文档,如readme.md。 # # - style: 仅仅是对格式进行修改,如逗号、缩进、空格等。不改变代码逻辑。 # # - refactor: 代码重构,没有新增功能或修复bug。 # # - perf: 优化相关,如提升性能、用户体验等。 # # - test: 测试用例,包括单元测试、集成测试。 # # - chore: 改变构建流程、或者增加依赖库、工具等。 # # - revert: 版本回滚。 # # # # <功能范围> 用于说明提交影响的功能范围。 # # # # <修改点简述> 提交目的的简短描述。 # # # # <修改点详述> 用于详细描述修改点,可选。不填写,请删除该行;若填写,请描述以下内容: # # - 为何进行修改 # # - 如何解决问题的 # # - 是否有副作用(必要时) # # # ######################################################################################## --- .../zh/network/cellLocator.md | 49 +++++ docs/Application_guide/zh/network/datacall.md | 2 + docs/Application_guide/zh/network/esim.md | 197 ++++++++++++++++++ docs/Application_guide/zh/network/sim.md | 92 ++++++++ docs/Application_guide/zh/network/sms.md | 92 ++++++++ 5 files changed, 432 insertions(+) create mode 100644 docs/Application_guide/zh/network/cellLocator.md create mode 100644 docs/Application_guide/zh/network/esim.md create mode 100644 docs/Application_guide/zh/network/sim.md create mode 100644 docs/Application_guide/zh/network/sms.md diff --git a/docs/Application_guide/zh/network/cellLocator.md b/docs/Application_guide/zh/network/cellLocator.md new file mode 100644 index 00000000..5bf561a4 --- /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 b0140964..34122dea 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 00000000..b7241598 --- /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 00000000..9005a5ba --- /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 00000000..ad245b26 --- /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) +``` + -- Gitee From 05d977a98e107dd57c0042b95b835a230accd2ec Mon Sep 17 00:00:00 2001 From: "Rich.wu" Date: Thu, 30 Mar 2023 13:49:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix=20(network):=20=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=BA=8C=E6=AC=A1=E6=A3=80=E6=9F=A5=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 否 ######################################################################################## # # # 示例: # # # # fix (network): 重复创建并关闭socket一定次数后,无法再次创建socket。 # # # # 1. 调用select接口并在其它线程调用socket.close()时,socket引用计数没有自减, # # 由于socket总数(即引用计数)有上限,导致创建一定数量的socket无法再次创建socket。 # # # # 2. 调用socket.close()释放资源时,将引用计数自减,及时释放出被占用的资源,修复该问题。# # # # 固件版本:EC600MCNLAR02_QPY # # # # 是否需要文案翻译: 是 # # # ######################################################################################## # # # 说明: # # # # <提交类型> 用于说明提交的类型,一般有以下几种: # # - feat: 新增feature。 # # - fix: 修复bug。 # # - docs: 仅仅修改了文档,如readme.md。 # # - style: 仅仅是对格式进行修改,如逗号、缩进、空格等。不改变代码逻辑。 # # - refactor: 代码重构,没有新增功能或修复bug。 # # - perf: 优化相关,如提升性能、用户体验等。 # # - test: 测试用例,包括单元测试、集成测试。 # # - chore: 改变构建流程、或者增加依赖库、工具等。 # # - revert: 版本回滚。 # # # # <功能范围> 用于说明提交影响的功能范围。 # # # # <修改点简述> 提交目的的简短描述。 # # # # <修改点详述> 用于详细描述修改点,可选。不填写,请删除该行;若填写,请描述以下内容: # # - 为何进行修改 # # - 如何解决问题的 # # - 是否有副作用(必要时) # # # ######################################################################################## --- .../atcmd.md" | 2 +- .../cellLocator.md" | 4 +- .../net.md" | 42 ++++--------------- .../sim.md" | 24 +++++------ .../sms.md" | 12 +++--- .../voiceCall.md" | 19 ++++----- .../wifilocator.md" | 4 +- 7 files changed, 38 insertions(+), 69 deletions(-) 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 30a5669b..d6c432b6 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 d835b8ba..20824fbc 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/net.md" "b/docs/API_reference/zh/QuecPython\347\261\273\345\272\223/net.md" index 3c2110df..a18300ae 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 15532642..a6d60d2d 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 bcf9a70f..15f61983 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 6cceb72b..be185d6a 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 237cf877..37e7206a 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系列支持该功能。 -- Gitee From f38f0b4fbca7b795a383d722eb41412d8bdfaacc Mon Sep 17 00:00:00 2001 From: "Rich.wu" Date: Thu, 30 Mar 2023 19:17:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix=20(dataCall):=20=E6=B3=A8=E6=84=8F?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0dataCall.getInfo=E4=B8=ADprofileID?= =?UTF-8?q?=E6=9C=80=E5=A4=A7=E5=80=BC=E8=AF=B4=E6=98=8E=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固件版本: N/A 是否需要文案翻译: 否 ######################################################################################## # # # 示例: # # # # fix (network): 重复创建并关闭socket一定次数后,无法再次创建socket。 # # # # 1. 调用select接口并在其它线程调用socket.close()时,socket引用计数没有自减, # # 由于socket总数(即引用计数)有上限,导致创建一定数量的socket无法再次创建socket。 # # # # 2. 调用socket.close()释放资源时,将引用计数自减,及时释放出被占用的资源,修复该问题。# # # # 固件版本:EC600MCNLAR02_QPY # # # # 是否需要文案翻译: 是 # # # ######################################################################################## # # # 说明: # # # # <提交类型> 用于说明提交的类型,一般有以下几种: # # - feat: 新增feature。 # # - fix: 修复bug。 # # - docs: 仅仅修改了文档,如readme.md。 # # - style: 仅仅是对格式进行修改,如逗号、缩进、空格等。不改变代码逻辑。 # # - refactor: 代码重构,没有新增功能或修复bug。 # # - perf: 优化相关,如提升性能、用户体验等。 # # - test: 测试用例,包括单元测试、集成测试。 # # - chore: 改变构建流程、或者增加依赖库、工具等。 # # - revert: 版本回滚。 # # # # <功能范围> 用于说明提交影响的功能范围。 # # # # <修改点简述> 提交目的的简短描述。 # # # # <修改点详述> 用于详细描述修改点,可选。不填写,请删除该行;若填写,请描述以下内容: # # - 为何进行修改 # # - 如何解决问题的 # # - 是否有副作用(必要时) # # # ######################################################################################## --- .../zh/QuecPython\347\261\273\345\272\223/dataCall.md" | 2 ++ 1 file changed, 2 insertions(+) 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 1cf22945..4de9d4b0 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为准。 -- Gitee