闲聊
AT命令的形式开发模块功能,往往需要在c语言环境中实现,为了方便调用AT命令,就需要把AT命令先定义在列表中。有些模块的AT命令可达上百条,一条一条复制粘贴没效率,想到Python开发简单,使用也方便,就用它来开发个小插件一劳永逸吧。
直接上源码
复制源码新建文件改后缀名为.py
双击即可生成各个文件了
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import codecs
# 打印当前目录
print("当前工作目录 : %s")
# 打开源文件,以AT指令规格书的目录为源文件
input = codecs.open('atcmdraw.txt', 'r', 'utf-8')
atCmdOutputFile = codecs.open('atcmd.txt', 'w', 'utf-8')
# 保存从源文件中提取AT指令说明部分,无此文件则创建该文件
atCmdInforOutputFile = codecs.open('atcmdInfor.txt', 'w', 'utf-8')
# 保存从源文件中提取AT指令并生成结构体数组,无此文件则创建该文件
# 单体如下:
# {
# .index = AC_QIDNSCFG,
# .readInfor = "AT+QIDNSCFG",
# .cmdInfor = "配置DNS服务器地址",
# },
atCmdStructListOutputFile = codecs.open('atcmdStruct.c', 'w', 'utf-8')
# 保存AT指令对应的以枚举变量的方式的序号,,无此文件则创建该文件
atCmdIndexOutputFile = codecs.open('atcmdIndex.h', 'w', 'utf-8')
index = 0 #用于计算AT指令对应的序号,并转换成枚举变量成员
# 将源文件的内容全部以行的形式读出来存放在列表中
lineList = input.readlines()
newList = []# 定义列表,用于存放包含有效AT指令
# 根据目录中标题的格式提取有效的AT指令
for line in lineList:
if (line.find('. AT') != -1):
newList.append(line)
# 将结构体数组注释写入文件中
atCmdStructListOutputFile.write('//移远物联网AT指令集\r\n')
# 将定义结构体变量命名写入文件中
atCmdStructListOutputFile.write('atCommandStruct_ts atCommandStructList[] = \r\n{\r\n')
# 循环将所有有效AT指令信息写入各个文件中
for line in newList:
if (line.find('. AT') != -1):
print(line)
# 去除源文件中的目录标题的序号,然后以空格为分隔符将各个部分信息分离
# 最终格式如下:
# ['AT+QISDE', '控制是否回显', 'AT+QISEND', '要发送的数据', '...............................................38\r\n']
itemList = line.lstrip('0123456789. ').split(' ')
print(itemList)
# 字符串中的双引号需要转成转义字符
cmd = itemList[0].replace('"','\\"')
print(cmd)
# 以空格为分隔符将各个部分信息分离后的长度大于等于3,就把所有成员串成一个字符
if len(itemList) >= 3:
for i in range(2 , len(itemList)):
itemList[1] = itemList[1] + itemList[i]
# 串联后的字符中存在多余字符,以英文字符.为分隔符将各个部分信息分离,第一部分即为AT指令说明了
cmdInfor = itemList[1].split('.')[0]
# 组合AT指令序号的枚举变量成员,比如:AT+QCFG="nwscanmode",转成AC_QCFG_nwscanmode作为枚举成员
# 需要将不合法的字符替换成合法的
cmdIndex = 'AC_' + cmd.replace('AT*','').replace('AT+','').replace('=','_').replace('*','_').replace('&','_').replace('^','_').replace('(/','_').replace('/','_').replace('\\"','').replace(')','')
# 将AT指令说明部分写入文件中
atCmdInforOutputFile.write(cmdInfor + '\r\n')
# 将AT指令部分写入文件中
atCmdOutputFile.write(cmd+ '\r\n')
# 组合结构体数组初始化格式
# 单体如下:
# {
# .index = AC_QIDNSCFG,
# .readInfor = "AT+QIDNSCFG",
# .cmdInfor = "配置DNS服务器地址",
# },
atCmdStructListOutputFile.write(' {\r\n')
atCmdStructListOutputFile.write(' .index = '+ cmdIndex + ',\r\n')
atCmdStructListOutputFile.write(' .readInfor = \"'+cmd + '\",\r\n')
atCmdStructListOutputFile.write(' .cmdInfor = \"'+cmdInfor + '\",\r\n')
atCmdStructListOutputFile.write(' },')
# 最后以行不需要换新行,防止多余的空行
if index != len(newList) - 1:
atCmdStructListOutputFile.write('\r\n')
# 组合成枚举变量成员及其注释,如下:
# /*010*/ AC_AT_V, //显示当前设置
atCmdIndexOutputFile.write(' ' + '/*{:0>3d}*/ '.format(index) + cmdIndex + ', //' + cmdInfor)
# 最后以行不需要换新行,防止多余的空行
if index != len(newList) - 1:
atCmdIndexOutputFile.write('\r\n')
index = index + 1
# 结构体变量收尾
atCmdStructListOutputFile.write('\r\n};')
# 操作完之后将各个文件关闭
atCmdOutputFile.close()
atCmdInforOutputFile.close()
atCmdStructListOutputFile.close()
atCmdIndexOutputFile.close()
生成文件
结构体数组格式,包含AT命令,AT命令说明已经对应的枚举标号
https://download.csdn.net/download/dropLin/85854353
{
.index = AC_QSIMSTAT,
.readInfor = "AT+QSIMSTAT",
.cmdInfor = "(U)SIM卡插拔状态上报",
},
枚举变量定义
https://download.csdn.net/download/dropLin/85854412
/*003*/ AC_GMR, //请求TA固件版本ID