利用AT命令获取所在位置的小区号和基站号

 利用AT命令获取所在位置的小区号和基站号

来源: 转载 作者:秩名 时间:2009-09-27 09:22 点击: 次 文字:【 】 我要投稿

核 心提示:利用小区号和基站号可以做简单的GSM定位,下面给出一个取得小区号和基站号的方法。 首先依然是打开AT指令端口。 HANDLE hCOM9 = CreateFile (LCOM9:,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if( hCO...

利用小区号和基站号可以做简单的GSM定位,下面给出一个取得小区号和基站号的方法。
首先依然是打开AT指令端口。

 
 
  1. HANDLE  hCOM9  =  CreateFile ( L"COM9:" , GENERIC_READ|GENERIC_WRITE , FILE_SHARE_READ|FILE_SHARE_WRITE , NULL , OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL , NULL );  
  2.  
  3. if (  hCOM9  == INVALID_HANDLE_VALUE ) MzMessageBoxEx( NULL , L"Error opening COM9" , NULL ); 

要取得小区号和基站号,需要首先让手机输出这两个号码,方法是利用设置命令 "AT+CREG=2"。然后再发送AT+CREG?查询即可取得基站号和ID号。

 

 
 
  1. DWORD dwBytes;  
  2. char  p  =  0x0D ;        //cr  
  3. char  q  =  0x0A ;        //lf  
  4. WriteFile( hCOM9 , “AT+ CREG = 2 ;+CREG?” , 9 , &dwBytes , NULL );  
  5. WriteFile( hCOM9 , &p , 1 , &dwBytes , NULL );  
  6. WriteFile( hCOM9 , &q , 1 , &dwBytes , NULL ); 

返回值应该是这样的:

 

 
 
  1. AT+ CREG = 2 ;+CREG? < cr > < lf >  
  2. +CREG: 2,n,"ABCD","ABCD" < cr > < lf >  
  3. OK < cr > < lf >  

其中第一个“ABCD”是小区号(LAC),第二个“ABCD”是基站号(CI)。
至于运营商,可以用AT+COPS?获取。返回值应该类似这样:

 

 
 
  1. AT+COPS? < cr > < lf >  
  2. +COPS: 0,0,"China Mobile" < cr > < lf >  
  3. OK < cr > < lf >  

这样,就可以利用取得的基站号和ID号做基站定位了。
当然,这样的方法,需要用户不断的发送命令并读取,比较麻烦。因此还有一个Infineon自己的命令,可以自动返回基站信息,就是AT+XCELLINFO。首先发送AT+XCELLINFO=1,然后GSM模块就会持续发回小区信息,具体格式因为没有文档 不是很清楚,但应该是这样的:

 

 
 
  1. +XCELLINFO: a,b,c,LAC,CI,d 

a/b/c/d的意义不是很清楚,只知道b应该是运营商代码(我收到的都是460,还有65535),d可能是信号强度,其他就不知道了。在不需要获取时,发送AT+XCELLINFO=0可以关闭小区信息发送。

 

 
 
  1. CloseHandle( hCOM9 ); 

注意,程序退出时要执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值