微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > mt2503 EMPTY_MMI的纯Modem的项目,如何完成实现收发短信的功能?

mt2503 EMPTY_MMI的纯Modem的项目,如何完成实现收发短信的功能?

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
由于客户的是Modem工程,没有MMI相关接口,因此不能使用MMI的短信接口完成收发
短信的功能,需要使用L4C的接口来完成。
[SOLUTION]
1、实现发送短信能力:
在L4c_SMS_cmd.h (ps\l4\l4c\include\proc)中,把它声明出来。
extern kal_bool l4c_sms_exe_post_pdu_req(
kal_uint8 src_id,
kal_uint16 reply_index,
kal_uint16 data_len,
kal_uint8 source_id,
kal_uint8 seq_num,
kal_uint8 MMS_mode,
kal_uint16 length,
kal_uint8 *pdu);
由于,PDU需转换为十六进制值,因此需要让客户在Rmmi_utility.h
(ps\l4\ATCI\include)声明出一个接口。
extern void check_hex_value(
kal_uint8 *str,
kal_uint8 *val);
如果没有上述的.h,在其他.h声明也可以。
使用方法如下:
假设要实现与 AT+CMGS = 28,
"0031030D91683165748091F50000FF0E61F1985C369F5B6376783E8F01"
PDU需要传世纪的十六进制值,而不是字符表示。因此请屏蔽原来的调用方法,参考
下面的调用方法:
{
kal_char msg[] =
"0031030D91683165748091F50000FF0E61F1985C369F5B6376783E8F01";
kal_uint8 pdu[]; /*
{0x00,0x31,0x03,0x0D,0x91,0x68,0x31,0x65,0x74,0x80,0x91,0xF5,0x00,0x00,0xF
F,0x0E,0x61,0xF1,0x98,0x5C,0x36,0x9F,0x5B,0x63,0x76,0x78,0x3E,0x8F,0x01}
*/
check_hex_value((kal_uint8*) msg, (kal_uint8*) pdu); // 可以直接使用
check_hex_value函数转换,得到的就是第二步注释中的结果.
l4c_sms_exe_post_pdu_req(RMMI_SRC, SMSAL_INVALID_INDEX, 28, 0, 0, 0, 29,
pdu); // 其中28是不包含SC地址的TPDU长度;29是包含了SC地址的TPDU的长度。
}

2、实现接收短信能力,需要先申请到Patch ID: MAUI_03153319,同时申请打开
__MT_SMS_ALSO_TO_LMMI__:
只在11B1308MP中支持。
客户需使用LMMI的接口,来处理接收短信,在文件Lmmi_ind.c
(custom\common\ps)中
// 如果系统用AT+cmgf设置为PDU模式,则会调用到如下接口:
void l4c_sms_new_msg_pdu_lind(kal_uint8 mti, /* Message Type Identifier*/
kal_uint16 length, // length of PDU (SCA+TPDU)
kal_uint8 id, /* Id for distinguish CNMA*/
void *data)// PDU (SCA+TPDU))
{
// PDU模式,需自行实现对PDU内容做解析。或者直接把PDU上报
// 传入函数中的data,包含了短信中心号码SCA和短信的TPDU,需自行实现解析。
// MTI表示的就是Spec中所说的, TP-MTI。如果是接收短信,则是0x00,如果是状态
报告,则是0x02
}
// 如果系统用AT+cmgf设置为TEXT模式,则会调用到如下接口:
void l4c_sms_new_msg_text_lind(kal_uint16 index,
kal_uint16 dest_port,
kal_uint16 src_port,
kal_uint8 mti,
kal_uint8 display_type,
kal_uint8 storage_type,
smsal_concat_struct *concat_info,
kal_uint16 message_len,
void *msg_header,
void *data)
{
// 文本模式,已对PDU做了解析。可直接获取相应信息。
// 假如短信中心号码是+8613800210500,发送号码是+8613564798195,短信的内容
是test。
// 那么传入的参数值会对应如下:
smsal_deliver_msg_hdr_struct *deliver_msg = &((smsal_header_info_union
*)msg_header->deliver);
deliver_msg->sca.addr_length; // 短信中心号码的长度 == 0x0D
deliver_msg->sca.addr_bcd[41]; // 短信中心号码 ==
{0x91,0x68,0x31,0x08,0X20,0x01,0x05,0xf0}
deliver_msg->oa.addr_length; // 发送方的号码长度 == 0x0D
deliver_msg->oa.addr_bcd[41]; // 发送方的号码 ==
{0x91,0x68,0x31,0x65,0x74,0x80,0x91,0xf5}
message_len; // 短信内容的长度 == 4
(kal_uint8 *)data; // 短信内容 == "test"
}

顶顶顶

谢谢分享!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top