是否,手机不同协议不同AT也不同?

nlnc 2003-08-11 11:27:30
我用电脑通过红外向手机发送AT指令,实现了短信的收发,可是,根据标准的PDU编码规则生成的编码在NOKIA手机上测试正常,但在MOTO手机上出现异常,例如短信内容长度编码异常,理论上应该是24,实际上却是28;而且字符越长,异常位相差越多;

我用AT+CPBR读取NOKIA手机电话簿成功,可是相同指令却不被MOTO认可执行,为什么?

难道是不同手机,内部协议不同?
...全文
164 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
chrislois 2003-12-11
  • 打赏
  • 举报
回复
up
lin6194 2003-08-29
  • 打赏
  • 举报
回复
我明白了,你说的1秒钟是只你发送AT+CMGS的时候的间隔,你不等待它返回,直接发送下一个。我觉得实际上它只是写到了接收缓冲区,Modem会等前一个发送完成后它会继续从缓冲区读取下一个。
可是速度不是取决于你写COM的速度,而在于Modem处理的速度。test09test(黑人)说的CDMA的模块我没有用过,但我用的GSM的Modem或者是手机,它发送一个都要等3-5秒,你用手机发短消息的时候都应该有明显的等待的感觉的。
所以在数量少的情况下,比如10条,你写到缓冲区只用了10秒或更少,这时你的程序返回,看起来是发送完成了,实际上Modem可能还在处理,所以这种计算方法是不对的。
当大量发送的时候,如果你写入的速度太快,就会出现你所提到的“串口来不及清空导致异常”,你中间加了一个Sleep(1000),也只是减慢了这个问题出现的速度,但只要你写的速度比Modem发送的速度快,就一定会把缓冲区填满,导致需要停顿较长时间,然后才能继续发送。
所以我认为,不管你等待发送的+CMGS返回也好,不等待也好,发送的速度极限就是你的Modem的发送速度,也就是取决于网络的速度。以目前的GSM网络,3秒钟一条已经是很不错的了。CDMA×1的SMS可能使用的不是GSM的SMS发送方式,也许速度会很快吧。
实际的速度计算应该以从大量发送的开始,到最后一条能够接收到来计算吧!
一些个人想法,希望大家讨论。
test09test 2003-08-29
  • 打赏
  • 举报
回复
你用thread去读和写串口,应该就不用sleep了
nlnc 2003-08-29
  • 打赏
  • 举报
回复
临时将COM和测试程序打包,放在以下地址,解压后,直接安装即可;
在安装使用过程中有任何问题,请和我联系:nlnc@163.com

http://user.7host.com/nlnccn/smscom/smscom.rar
nlnc 2003-08-29
  • 打赏
  • 举报
回复
也许我还没有说清楚吧,在COM里封装的SMSSEND这个方法,他是这样执行的,如果AT+CGMS=返回“OK”,一般少于1秒就返回“OK”,当然,返回OK以前会首先返回“>”,这个时候SMSSEND会自动将信息PDU编码并发送;

如果返回“ERROR”,则SMSSEND返回FALSE;

如果在TIMEOUT时间内,例如5秒,即没有返回“OK”,也没有返回“ERROR”,返回不返回“>”不用考虑,则同样SMSSEND返回FALSE;

也就是,如果SMSSEND返回TRUE,是通过AT指令和手机通讯协议确保了的发送成功的;

另外,COM里面加线程并不是特别明智,但可以在客户端用线程调用方法,这样容易与其他内容同步或异步;
lin6194 2003-08-28
  • 打赏
  • 举报
回复
你是说每发一条延时一秒还是说AT+CMGS返回OK只需要一秒。我用的NOKIA8250,最快大概也就是4秒钟一条。能不能把你的COM让我试用一下。marksoft@21cn.com谢谢
nlnc 2003-08-28
  • 打赏
  • 举报
回复
把和手机的通讯封装成了COM,硬件设备是MOTO L2000WWW、红外,或者NOKIA8210、8310,NOKIA比MOTO还快;

我设置了延时,大约1秒钟一条,没有问题;
nlnc 2003-08-28
  • 打赏
  • 举报
回复
当然,在封装COM时我已经考虑到,例如一个SMSSEND发送方法,要么发送成功返回TRUE,要么因为读到“ERROR”返回FALSE,要么因为在TIMEOUT时间内没有响应(“OK”、“ERROR”),也返回FALSE,只所以在客户端也用SLEEP是因为CPU在发送的时候和串口的同步非常困难,毕竟是异步通讯嘛,设置一个SLEEP算是让CPU在两次发送的间隙有完全的空间和时间“反省”一下,我的P4 1.7 M 在使用了SLEEP后现的“欢快”不少,也许其他客户端不用这样做也说不定。
test09test 2003-08-28
  • 打赏
  • 举报
回复
我用过wavecom的cdma 1x的模块,用它发短讯几乎可以同步处理,速度难以置信的快.另外,你群发时也不需sleep啊,你只要读到串口的ok或error来处理,而且你只有这样才能知道你这条短讯有没有成功发出。你也可打开delivery report,来判断对方是否成功收到你的短讯

nlnc 2003-08-28
  • 打赏
  • 举报
回复
在群发的时候,为了防止数次发送之间由于串口来不及清空导致异常,所以设置了SLEEP(1000),不过单发的时候却没有关系,总体而言,发送大约1秒搞定,最迟明天把测试版发送给你;
nlnc 2003-08-27
  • 打赏
  • 举报
回复
目前我做的都是在AT+CMGF=0即PDU模式下的读写,所以在发送短信的时候需要PDU编码,不然就简单了;

MOTO只支持PDU模式;难道就不能解决?MOTO自己是有办法解读,可是没人告诉我;
lin6194 2003-08-27
  • 打赏
  • 举报
回复
AT+CSCS不支持UCS2的现象太普遍了,还有很多手机都不支持你用的AT+CMGF=1的文本发送和读取的方式,你要做通用,一定要用PDU模式,否则没戏的!
lin6194 2003-08-27
  • 打赏
  • 举报
回复
nlnc(风之8号) :在另一个帖子看到你说你的短信1秒钟发送一个,真的有这么快吗?你用的什么设备和那个网络啊?
lin6194 2003-08-27
  • 打赏
  • 举报
回复
把你的Moto收到的码发上来看一下。
nlnc 2003-08-26
  • 打赏
  • 举报
回复
"UCS2","GSM","PCCP437","PCDN","IRA","8859-1","HEX"

“Unicode要解码”-->NOKIA手机可以通过设置AT+CSCS来解码,已经实现,可是,MOTO只有GSM和IRA两种字符集,出来的是“»}??»i”;

采用GSM编码表,每个字符7bits-->用DELPHI开发,本身就可以将中文字符转化,英文确实要考虑7位GSM编码问题,但是中文不用啊,奇怪的是,同样的编码程序,对于NOKIA完全正确,对于MOTO就出现前述问题;
lin6194 2003-08-26
  • 打赏
  • 举报
回复
普通图片铃声适用短信编码,按照不通品牌的手机编码就可以发送不通的图片铃声。

"电话簿姓名显示英文没问题、但中文乱码" --> Unicode要解码
"MOTO在PDU编码短信长度这一位上与标准PDU编码规则有差异,每隔7个字符会丢半位"--> 采用GSM编码表,每个字符7bits,要解码成ANSI否则有些字符不能显示,或显示错误!
xuefengal 2003-08-25
  • 打赏
  • 举报
回复
红外不是有一些通用的基本协议吗?
要是把那个用上的话可能还可以的。
西门子有一个软件叫什么“疯狂短信”的,那个就可以的,它还要以给其它的机器发送图片和声音短信的
lin6194 2003-08-25
  • 打赏
  • 举报
回复
这种情况在其他手机里面也有出现,我想主要是厂商不愿意去实现太多的功能,但又想这些指令能够运行,所以就会出现,你可以适用那几个值,但他们最终都等价于某一个值。
nlnc 2003-08-25
  • 打赏
  • 举报
回复
回复上述:MOTOL2000、P7689,AT+CMGL无论0、1、2、3、4都返回所有短信列表;
nlnc 2003-08-25
  • 打赏
  • 举报
回复
只要有媒体信息的编码方式(比如SMS的PDU编码)、并且手机支持相关AT指令的话(比如AT+CMGS),无论是图片和声音应该都没有问题;

我现在已经实现SMS的操作,读取接受到的短信(列表或一条),发送短信,存短信,删短信;

电话簿操作,读取电话簿(列表或指定位置),存电话;

封装的是COM,目前针对MOTO、NOKIA、SONY、SAMSONG均测试通过;但还有一定问题,比如,电话簿姓名显示英文没问题、但中文乱码,NOKIA可以设置编码方式可以解决,MOTO不行,短信发送时,MOTO在PDU编码短信长度这一位上与标准PDU编码规则有差异,每隔7个字符会丢半位。
加载更多回复(12)

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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