驱动程序和AT命令

驱动程序和AT命令
http://www.voiceangel.com 2003年06月29日 18:31   <script language="JavaScript" src="/cgi-bin/news/aacount.cgi?AT20030629183127" type="text/javascript"></script>  双击鼠标滚屏

 
  不同的猫可能会有不同的at命令。在windows系统中,每个猫的驱动程序的inf文件里都可以找到一些at命令,比如,下面是从金网霸fm3711猫的xp下的驱动程序中摘录的一段。可以看出,这是在告诉windows执行各种操作时对应的at命令。比如初始化猫的时候就要执行"AT&FE0V1S0=0&C1&D2+MR=2;+DR=1;+ER=1;W2<cr>"下面是金网霸语音猫的驱动程序文件(.inf)的一部分,在安装驱动之后,这些信息就被写到注册表里面了.HKR, Init, 1,, "AT<cr>"
HKR, Init, 2,, "AT&FE0V1S0=0&C1&D2+MR=2;+DR=1;+ER=1;W2<cr>"
HKR, Monitor, 1,, "ATS0=0<cr>"
HKR, Monitor, 2,, "None"
HKR, Hangup, 1,, "ATH<cr>"
HKR, Answer, 1,, "ATA<cr>"
HKR, , Reset,, "ATZ<cr>"
。。。。。HKR, StartPlay, 1,, "at+vtx<cr>"
HKR, StopPlay, 1,, "None"
HKR, StopPlay, 2,, "NoResponse"
HKR, StartRecord, 1,, "at+vrx<cr>"
HKR, StopRecord, 1,, "None"
HKR, StopRecord, 2,, "NoResponse"
HKR,, TerminateRecord,, "<h10><h21>"
HKR,, TerminatePlay,, "<h10><h03>"
HKR,, AbortPlay,, "<h10><h03>"
HKR, LineSetPlayFormat, 1,, "at+vsm=130,8000,0,0<cr>"
HKR, LineSetRecordFormat, 1,, "at+vsm=130,8000,0,0<cr>"

HKR, VoiceToDataAnswer, 1,, "at+fclass=0<cr>"
HKR, VoiceToDataAnswer, 2,, "ata<cr>"
下面是应答的时候要执行的命令。注意,在语音模式下,at+vls=1<cr>"就可以应答了,不需要ata
HKR, VoiceAnswer, 1,, "at+fclass=8<cr>"
HKR, VoiceAnswer, 2,, "at+vtd=10<cr>"
HKR, VoiceAnswer, 3,, "at+vsm=130,8000,0,0<cr>"  设置语音数据压缩格式。
HKR, VoiceAnswer, 4,, "at+vit=6<cr>"
HKR, VoiceAnswer, 5,, "at+vls=1<cr>"

HKR, VoiceDialNumberSetup, 1,, "at+fclass=8<cr>"
HKR, VoiceDialNumberSetup, 2,, "at+vls=0<cr>"
HKR, VoiceDialNumberSetup, 3,, "at+vrn=0<cr>"
HKR, VoiceDialNumberSetup, 4,, "at+vtd=10<cr>"
HKR, VoiceDialNumberSetup, 5,, "at+vsm=130,8000,0,0<cr>"
HKR, VoiceDialNumberSetup, 6,, "at+vit=6<cr>"
下面是猫发送给电脑的响应字符串。

HKR, Responses, "0<cr>", 1, 00, 00, 00,00,00,00, 00,00,00,00 ; OK
HKR, Responses, "1<cr>", 1, 02, 00, 00,00,00,00, 00,00,00,00 ; CONNECT
HKR, Responses, "2<cr>", 1, 08, 00, 00,00,00,00, 00,00,00,00 ; RING
HKR, Responses, "3<cr>", 1, 04, 00, 00,00,00,00, 00,00,00,00 ; NO CARRIER
HKR, Responses, "4<cr>", 1, 03, 00, 00,00,00,00, 00,00,00,00 ; ERROR
HKR, Responses, "5<cr>", 1, 02, 00, B0,04,00,00, 00,00,00,00 ; CONNECT 1200
HKR, Responses, "6<cr>", 1, 05, 00, 00,00,00,00, 00,00,00,00 ; NO DIALTONE
HKR, Responses, "7<cr>", 1, 06, 00, 00,00,00,00, 00,00,00,00 ; BUSY
HKR, Responses, "8<cr>", 1, 07, 00, 00,00,00,00, 00,00,00,00 ; NO ANSWER关于详细的驱动信息,请看完整的inf文件  在驱动程序安装以后,这些信息就被装到注册表里去了。不同的操作系统,注册表的结构也有所不同。在win9x中,在LOCAL_MACHINE/system/CurrentControlSet/services/class/modem下,每一个猫对应一个子目录,比如第一个猫是0000目录,第二个是0001.打开目录,可以看到许多子目录和数据项,每个子目录对应着一个动作,比如拨号,应答等,目录里面则是具体的AT命令。数据项中描述了猫的一些属性,比如Model项就是猫的驱动描述,matchingDeviceID对应的是PCI/xxxx,在LOCAL_MACHINE/system/CurrentControlSet/services/enum下可以找到这个项,在里面可以找到和串口有关的信息,比如猫对应的串口号等。  在xp中,LOCAL_MACHINE/system/CurrentControlSet/services/modem下可以找到0,1...项代表各路猫。打开其中的一项,其值是PCI/XXXX的格式。在LOCAL_MACHINE/system/ControlSet001/enum/中可以找到与该值相应的项。打开它的子项,其中有一项是Driver,在LOCAL_MACHINE/system/ControlSet001/control/class中可以找到项名为Deriver的值的项,该项下面有许多项,比如Answer,VoiceAnswer,StartPlay,StartRecord,EnableCallerID,Hangup等等,打开其中的一项,可以发现里面的内容是猫执行某项操作的时候需要用到的AT命令。比如Rockwell芯片的猫的EnableCallerID里面的内容通常是 Name   Type    Data (Default) REG_SZ  (value not set)  1    REG_SZ  at+vcid=1<cr>有时候猫的驱动程序安装不正确,里面就有可能缺少某些项,比如金网霸PF-X01(芯片Conexant 11242)在98下安装后就没有 EnableCallerID 项,这样在TAPI模式下,猫就没有来电显示功能了。要想解决这个问题,可以手工把这一项添加到注册表里面。  在winxp下,系统会自动给猫安装驱动程序,删除了系统自动安装的驱动程序之后,扫描硬件改动,系统仍然会自动安装系统自带的驱动程序。要想使用厂家提供的驱动程序,在设备管理里面找到猫,然后双击,找到驱动程序页面,点更新驱动程序,出现更新驱动向导,有两个选项,第一个是自动安装,第二个是从列表或特定的位置安装,选择第二个,点下一步,又出现两个选项,第一个是从下列位置中选择搜索驱动程序,第二个是不搜索,直接选择驱动程序。选择第二个,点下一步,再点从磁盘安装,找到驱动程序存放的位置,就可以了。
 
配送一个自己写的串口驱动程序 用DMA接收数据 接收完会产生一个空闲中断 由此可判断接收完一个包的数据 再配送一个我自己写的动态内存管理 跟ESP8266的驱动 在项目中测试460800的波特率 30kb一秒的数据接收 一包1024个字节 每包需要应答15字节的情况下 AT指令处理是使用多个缓冲级来处理模块发送过来的数据 分别有模块应答缓冲级 跟等待应答的缓冲级、被忽略的AT指令集的缓冲级(例如注册一个SEND OK\r\n则模块应答此条指令立刻清除缓冲级释放内存无需等待超时直接忽略)还有需要回调的缓冲级(则出现此指令调用回调函数)都是通过注册的方式来实现 如果出现一包跟指令被分到一个包内 AT处理函数一样可以搜索到AT指令 使用strstr函数来实现 函数的缓冲级都是指针不占用内存 使用动态内存管理的方式 有数据则创建内存放入数据作为一个缓冲级 如果模块应答的数据在规定的时间内没有响应则删除此缓冲级 函数前都有注释介绍 下面介绍一些常用的函数: at_init初始化一些变量已经串口 at_time_task使用定时器回调 1毫秒回调一次 用来计数超时的指令缓冲&等待超时的计数 at_clear_all 在模块开机的时候可能会有很多乱数据 可以在初始化完毕后使用此函数清除所有缓冲级 释放所有内存 at_processing处理AT的应答超时的指令(做删除释放内存的动作),还有处理等待的AT指令 此函数一定要不断循环处理 可以加入到定时器 目前我实验是在UCOS上的 所以直接创建个任务来执行此函数 当程序在等待某个AT指令的时候此函数会寻找接收的缓冲级是否有等待的AT指令 at_cmd_cb_hand回调处理函数 如果接收缓冲级出现某个已经注册的指令则回调注册时所填写的函数地址 at_send_cmd 发送一个AT指令 可以用跟printf一样使用 %d等等 at_send_data 发送数据的时候所使用 需要填写长度 at_cmd_ignore_register 注册一个被忽略的AT指令 带入参数 *s (例如填写一个"SEND OK" 则模块应答的此条指令直接被忽略 释放内存 被忽略之前会检查此缓冲级会不会带有别的AT指令需要回调的) at_cmd_ignore_cancel 取消被忽略的指令 则取消已经注册的被忽略的AT指令 at_cmd_cb_register AT指令的回调注册 例如参数填写"+IPD",函数名a 则出现+IPD的时候回调a函数 a函数有类型 在at.h文件里面有 at_cmd_cb_cancel注销回调你懂得 at_wait_cmd 等待一个AT指令集或者超时则立刻返回 等待途中会不断调用OS的延迟程序 让系统能有时间去执行其他任务 使用方法例如{ at_send_cmd("AT+UART=%u,%u,%u,%u,%u\r\n",baudrate,databit,stopbit,parity,flow_control); return (esp_error)at_wait_cmd("\r\nOK\r\n",2000,NULL); } at_error at_wait2_cmd(char *s,char *s2,u16 timeout,u8 *index) 此函数是等待两个AT指令集 如果出现一个则立刻返回 返回值h文件有介绍 AT_DONE则出现此条指令 index参数则提取应答的缓冲首地址 使用at_buf_get函数获取首地址 使用完后要调用at_free_buf来清除并释放这个缓冲级 at_buf_len_get查询此应答的缓冲级长度 如果在index填写NULL则不需要缓冲级首地址 直接清除释放缓冲级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值