- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android中添加AT命令流程
android中如何添加一个AT命令
简介:
android平台,自带的参考RIL层是使用AT命令来和modem进行通信的,因为它假定AP和CP可能来自不同的厂家,所以AP和CP之间采用的是松耦合的机制。而高通平台,AP和CP都由高通提供,所以两颗CPU之间的通信采用紧耦合机制,采用ONCRPC或QMI来进行通信。
AT命令和QMI各有优缺点,AT命令有国际统一的标准,实现简单,但是实现的功能少,效率较低。而QMI机制是高通制定的,其实现复杂,但是效率高。
下面介绍使用AT命令机制实现的RIL,如何添加一个AT命令。我们假定要加一个读取CDMA modem的IMSI值的AT命令。
一、在上层添加所要发的AT命令的方法1. 在接口phone中添加所要发的AT命令的方法。接口phone所在的位置是:frameworks/base/telephony/java/com/android/internal/telephony/Phone.java
在phone的接口中添加方法:getcdmaIMSI();
Phone是个接口,因此,添加完方法后,得在实现Phone接口的java类里面实现这个方法,GSM实现Phone的类是GSMPhone.java,CDMA实现phone的类是CDMAPhone.javaGSMPhone.java位于frameworks/base/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java
CDMAPhone.java位于frameworks/base/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
public String getcdmaIMSI() {
return mSST.getImsi();
}
2. Phone接口的实现方法调用CommandsInterface接口里面的方法,所以我们还需要在CommandsInterface里面把我们要增加的方法添加进去。
CommandsInterface接口位于:rameworks/base/telephony/java/com/android/internal/telephony/commandsinterface.java
在commandsinterface接口中添加方法:void getIMSI(String aid, Message result);
同样的,CommandInterface也是个接口,我们需要在实现接口的类里实现这个方法。而实现这个接口的类有2个:1. frameworks/base/telephony/java/com/android/internal/telephony /RIL.java2. frameworks/base/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java其中第2个是在模拟器里面测试用的, 我们只需要在里面把方法添加进去,然后调用个resultSuccess或者umimplement都可以。而第1个才是真正实现功能的类。所以,我们得在RIL.java中,实现具体的方法。在RIL.java的方法里面,只需要定义好你所需要发送AT命令的一个标识MARK(下面还会提到), 再把RilRequest类里面的Parcel成员mp赋值, 然后发送出去即可。赋给mp的值,即为我们需要发送到下层去处理的值, 例如传个数组下去, 一般都先把长度写进去, 其次再把成员依次写入。 public void
getIMSI(String aid, Message result) {
RILRequest rr = RILRequest.obtain(RIL_REQUEST_GET_IMSI, result);
rr.mp.writeInt(1);
rr.mp.writeString(aid);
if (RILJ_LOGD) riljLog(rr.serialString() +
getIMSI: + requestToString(rr.mRequest)
+ aid: + aid);
send(rr);
}
二、在下层添加实现的函数1. 在hardware/ril/include/telephony/ri
原创力文档


文档评论(0)