免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > GSM SMS移植到Android平台(3)

GSM SMS移植到Android平台(3)

时间:2012-06-05 18:02来源:未知 整理:寂涯网络 点击:


信需在字符串结尾加上’Ox00’和’0xlA’。
⑤调用at—send—command()函数,设置短信参
数。对于英文短信需将编码字段<fmt>设置为1
(GsM 7bit编码),对于中文短信需将编码字段设置为
6(UCS2编码)。
⑥调用at—send—command—sms()接口函数,对
目标地址下发短信正文内容。至此RIL层已经完成短
信发送功能。

3.2 SMS Receive功能移植
text模式下,CDMA EvDo模组上报的内容,英文
短信情况下以原字符显示,中文短信则以UCs2编码
显示。GSM Phone框架下,Android telephony
ramework层通过Socket等待RIL层传递过来的
MS必须为Deliver—PDU字符串形式。为此在RIL层
需要对模组上报的内容进行编码转换成GSM
eliver—PDU字符串。
.2.1新短信直接上报指示语法结构与取值说明
以下是CDMA EvDo模块在测试板上,发送
“hello”内容给模块,模块主动上报的信息。
‘HCMT:18962369641,2011,9,23.9,40,6,0,
,5
hello-’
其语法结构‘63如下:
‘HCMT:<callerlD>,<year>,<month>,<day>·
hour>.<minute>,<second>.<lang>,<format>。<
ength><CR><LF><msg><CTRL+Z><CR><LF
>
各字段取值说明如下:
<lang>:语言,取值为0时为普通英文短信。取
值为6时为中文短信。
<format>:表示短消息的编码格式,1表示
ASCII编码,按照原字符发送。例如字母A的ASCIl
码为0x41,则传输的字符为“A”;当该字段为6时,表
示为Unicode编码,Unicode编码按照字符的原始值
传送。例如汉字“一”的Unicode编码为0x4E00,则传
输的字符为‘0x4E00’。
<CTRL+Z>:标识一条消息的结束,字符为:’
0xlA’(Unicode编码对应为:’0x001A)。
3.2.2具体编码流程
编码工作流程如图2所示,详细说明如下。
①编写功能函数,提取发送方号码、<lang>字
段、短信正文内容。
②将发送方号码转换为标准发OA(Originator
Address)字段,具体实现会用到sms—address—from
str()函数。SMS Addresses结构体定义如下:
#define SMS..ADDRESS..MAX..SIZE 16
typedef struct{
unsigned char len;
unsigned char toa;I
unsigned char data[SMS_ADDRESS_MAX_SIZE])
}SmsAddressRec,-SmsAddress l
③获取SMS时间戳,调用sms—timestamp—now
(&timestamp)函数。SMS时间戳结构体如下:
typedef struct{
unsigned char data[7];
)SmsTimeStampRec,-SmsTimeStamp l
④编写功能函数get—text()取短信正文内容的
value值。对于英文短信,直接取模组上报的原始值。对
中文短信,按照每个字节(8bit)处理,取其value。如
“你好”的UCS2编码为“4F60597D”,其对应的value
值为“O’Y)”。
⑤将text值转化为标准GSM SMS PDU结构,
调用函数smspdu—create—deliver—utf8(text,
length,&addr,8‘timestamp)。由于在UTF一8里,英
文字符仍然跟ASCII编码一样,所以可以直接转换。
为便于统一处理,对于中文短信,需先将UCS2字符串
的value转化为UTF8字节流字符串的value,转换方
法如下:例如“汉”字的UCS2编码是0x6C49。6C49在
0800一FFFF之间,所以要用到3字节模板[7】:
lllOxxxx lOxxxxxx 10xxxxxx。将6C49写成二迸制
是:0110 110001 001001,用这个比特流依次代替模板
中的X,得到:11100110 10110001 10001001,即E6 B
89。编码实际过程中要用到了ucs2 to utfS()转换函
数,该函数在sms—gsm.C源程序中已有实现,在这里
不再赘述。
⑥调用函数smspdu—to—hex(p[0],hex—pdu,
512),将SMS PDU转换为PDU字符串形式。
⑦调用函数RIL onUnsolicitedResponse(RIL
UNSOL—RESPONSE—NEW—SMS,hex—pdu,
strlen(hex—pdu)),将Deliver—PDU字符串上报给
Android framework层。
Ril层编码工作流程
4 结束语
Android操作系统在RIL层提供了对GSM网络的支持。RIL则提供了SMS发送和上报的接口函数。
通过分析GSM SMS PDU的协议字段含义,结合

本页地址 http://www.jybase.net/biancheng/20120605940.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com