求AT Command调用例子

无聊客 2006-05-26 11:19:26
以前没用过,有用过的朋友给贴段代码看看,急.
...全文
785 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nettman 2006-05-30
  • 打赏
  • 举报
回复
直接通过串口发字符串就可以了!
samp_miao 2006-05-30
  • 打赏
  • 举报
回复
pda上的例子我找不到了。这个是我pc上的例子,pda上不支持overlapped。你改下就好了。
DCB dcb;
COMMTIMEOUTS timeouts = {MAXDWORD, 0, 110, 0, 20};



hCom = CreateFile(L"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);

if (INVALID_HANDLE_VALUE == hCom)
{
return FALSE;
}
GetCommState(hCom, &dcb);
dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
SetCommState(hCom, &dcb);

SetupComm(hCom, 4096, 1024);

SetCommTimeouts(hCom, &timeouts);


SetCommMask(hCom,EV_RXCHAR);

DWORD dwNumWrite;
if(!WriteFile(hCom, pData, (DWORD)nLength, &dwNumWrite, &overlapped_write))
{
;

}



COMSTAT ComStat;

ClearCommError( hCom, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return 0;

nLength = min(nLength,(DWORD) ComStat.cbInQue);

if(!ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, &overlapped_read))
{

}

CloseHandle(hCom);


samp_miao 2006-05-30
  • 打赏
  • 举报
回复
pda上的例子我找不到了。这个是我pc上的例子,pda上不支持overlapped。你改下就好了。
DCB dcb;
COMMTIMEOUTS timeouts = {MAXDWORD, 0, 110, 0, 20};



hCom = CreateFile(L"COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);

if (INVALID_HANDLE_VALUE == hCom)
{
return FALSE;
}
GetCommState(hCom, &dcb);
dcb.BaudRate = 115200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
SetCommState(hCom, &dcb);

SetupComm(hCom, 4096, 1024);

SetCommTimeouts(hCom, &timeouts);


SetCommMask(hCom,EV_RXCHAR);

DWORD dwNumWrite;
if(!WriteFile(hCom, pData, (DWORD)nLength, &dwNumWrite, &overlapped_write))
{
;

}



COMSTAT ComStat;

ClearCommError( hCom, &dwErrorFlags, &ComStat );
if( !ComStat.cbInQue ) return 0;

nLength = min(nLength,(DWORD) ComStat.cbInQue);

if(!ReadFile(hCom, pData, (DWORD)nLength, &dwNumRead, &overlapped_read))
{

}

CloseHandle(hCom);


samp_miao 2006-05-30
  • 打赏
  • 举报
回复
CreateFile,writefile,等。打开com口之后,写个at指令就可以了,然后等收到返回时候读com数据然后分析解码就可以了。
befree 2006-05-29
  • 打赏
  • 举报
回复
只是at拔号挺简单,建立连接后用协议传输可以用一些做好的控件
universes 2006-05-29
  • 打赏
  • 举报
回复
mark
载舟之水 2006-05-26
  • 打赏
  • 举报
回复
画个图可以说清楚

PPC/SP智能手机架构

[应用处理器/存储器/WinCE OS]-------(串口)---------[GSM模块OS/GSM协议栈/处理器/存储器]

智能手机一般是双处理器的,两部分之间通过串口连接。所以通过PC串口发AT不行,因为唯一的串口已经被连接到[应用处理器]这端了。必须通过[应用处理器]这端的应用程序去访问串口,但是同时必须通过修改注册表,把RIL占用的串口改掉。如果是WINCE的话就没这个占用的问题,直接访问串口就行。


要通过


一般手机架构

[GSM模块OS/GSM协议栈/处理器/存储器]

一般手机只要开放了串口,可以通过PC串口连接,AT command去访问手机
载舟之水 2006-05-26
  • 打赏
  • 举报
回复
文档里有标准命令,但是要看你的号码是存放在模块的存储器还是在应用处理器这边。
智能手机一般是双CPU架构的,所以有两个地方可以存储,而普通手机只能存储在模块这端或卡里。
无聊客 2006-05-26
  • 打赏
  • 举报
回复
其实我就是想通过AT命令拿一下手机本机号码而已
载舟之水 2006-05-26
  • 打赏
  • 举报
回复
你首先要明确你使用的通信模块是什么的,最好有模块的开发文档,不然遇到问题不好解决
载舟之水 2006-05-26
  • 打赏
  • 举报
回复
哦,那其实很简单,你在程序中打开串口,设好波特率,要和GSM模块对应,然后你首先要设置模块的基本配置,比如关闭回显E0,关闭Multiplexer模式AT+CMUX,设好初始化参数之后,就可以使用一般的AT了。你要GSM协议是符合3GPP的,但是不同模块有所不同,AT Command区别一般不大,区别主要在Multiplexer模式上。你要GSM的标准文档我可以发给你。

发送给串口的信息就是字符,比如

ATD1860; 是拨打1860

这时模块通过串口会回应 [回车][换行]OK[回车][换行]

我给你看看一些LOG

ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CHLD=0<cr>
RilDrv: Accumulated response: <cr><lf>+CME ERROR: 3<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CPAS<cr>
RilDrv: Accumulated response: <cr><lf>+CPAS: 0<cr><lf><cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CLCC<cr>
RilDrv: Accumulated response: <cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CLCC<cr>
RilDrv: Accumulated response: <cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CMUT?<cr>
RilDrv: Accumulated response: <cr><lf>+CMUT: 0<cr><lf><cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CSQ<cr>
RilDrv: Accumulated response: <cr><lf>+CSQ: 17,99<cr><lf><cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CSQ<cr>
RilDrv: Accumulated response: <cr><lf>+CSQ: 17,99<cr><lf><cr><lf>OK<cr><lf>
ResponseThread Before VirtWaitCommEvent
RilDrv: Sending cmd: AT+CSQ<cr>

无聊客 2006-05-26
  • 打赏
  • 举报
回复
我是指通过串口。。。。。。。
这块以前都没接触过
载舟之水 2006-05-26
  • 打赏
  • 举报
回复
不明白你的意思,RIL driver和GSM协议栈我都做过一些,但是在应用里没法通过RIL去发送AT,只能通过串口。

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧