Python小插件自动提取规格书中的AT命令

闲聊

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值