- 浏览: 436059 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
weiwu83:
为什么我在手机内访问127.0.0.1访问不了呀
NanoHttpd 构建android 手机端的HttpServer -
jiae:
为啥我的插入语句乱码? 但是可以插入数据库 然后复制你 ...
SQLite3 在应用启动时初始化数据 -
lichenxiao77:
...
android 连接远程数据库 -
林源滔:
为什么我make clobber之后第一次执行make 可以。 ...
No rule to make target `out/target/common/obj/JAVA_LIBRARIES/bouncycastle_in -
cn23snyga:
new String(str.getBytes("I ...
android 平台上SQLite3中文乱码 --我的小bug
ril是具体的AT指令合成者和应答解析者。从最基本的功能来讲,ril建立了一个侦听Socket,等待客户端的连接,然后从该连接上读取RIL-Java成传递来的命令并转化成AT指令发送到Modem。并等待Modem的回应,然后将结果通过套接口传回到Ril-Java层。
AT通讯的过程中有两类响应:一种是请求后给出应答,一种是通知类,即为不请自来的,例如短信通知达到,我们称该类通知为URC。在Rild中URC和一般的Response是分开处理的,概念上URC由handleUnsolicited@Atchannel.c处理,而Response由handleFinalResponse来处理。
来源:http://www.uml.org.cn/mobiledev/201107263.asp
与AT error有关的网址:http://www.developershome.com/sms/resultCodes2.asp 利用AT命令无线模块拨号上网以及建立PPP连接的流程图如图4.3所示。
无线模块的无线网络连接可分为比较明显的两阶段:
第一阶段,配置无线模块参数,进行一系列初始化,然后发送AT指令拨上中国移
动GPRS的WAP网关;
第二阶段,同GPRS的WAP网关通过三阶段协商(即LCP连接协商、CHAP密码
认证、NCP网络层协议配置)建立PPP连接链路。
连接成功后,无线模块就会从GPRS的WAP网关上获得一个动态IP地址,该动态
IP地址一般是10.188.xxx.xxx。接下来,无线模块就可以进行TCP/IP数据包传输,访问
GPRS网内的主机,完成无线网络的连接,发送封装好的MMS信息。
AT命令集是调制解调器可以识别并执行的命令,专门用于控制GSM Modem,它是由美国Hayes公司所发展的数据传输通信接口。计算机和单片机通过串行端口对Modem发出相应的AT命令,可以调整Modem各种工作方式。AT命令简单、容易掌握,GSM07.07协议对AT指令做了详细的介绍。GSM07.07中定义的AT Command接口,提供了一种移动平台与数据终端设备之间的通用接口。GSM模块提供的命令接口符合GSM07.07规范,在短消息模块收到网络发来的短消息时,能够通过串口发送指示消息,数据终端设备可以向GSM模块发送各种命令。AT指令在当代手机通讯中起着重要的作用,用户能够通过AT指令控制手机的许多行为,包括进行呼叫、拨叫号码、按键控制、短信、电话本、数据业务、补充业务、传真、GPRS等方面的控制。本课题中是控制模块利用AT命令来控制无线模块拨号连接无线网络。
AT命令的语法是[[351:在每行命令的开头都必须有“AT”或者“at”作前缀,用输入<CR>来结束这个命令。"ATXX”及少量“AT十XXX”为V.25标准命令集;"AT+CXXX "为GSM标准所扩展的AT命令;"AT+SXXX”为SIEMENS定义扩展的AT命令。
发送AT指令时,应注意以下几点:
(1)每个AT命令字符串的最后面必须加上CR(也就是键盘上的Enter键)字符,否则无线模块将不识别此命令。这个字符就是结束符。
(2)除了“A/”及“+++”命令外,其它的命令必须加上AT两个字符。
(3)命令字符串可以合成一个字符串后再一次送给调制解调器,但总的字符串长度
不得超过40个字符,而且所有的字符必须一律大写或小写。
本课题中,无线模块采用的是BENQ M22的GSM/GPRS模块,因为选用的是专业厂家生产的GPRS模块,设计中可以不再考虑GPRS附着和PDP上下文激活等复杂过程,只需用AT指令操作专用的GPRS模块上网即可。用AT命令设置无线模块的参数时,必须先要将命令写入串口,读取串口的应答数据来判断是否成功。一般命令发送成功时,模块会返回数据“OK",表示命令执行成功。如果没有成功,要继续发送命令,
发送3次后还是没有成功,就重新初始化串口。
对无线模块GPRS拨号上网,需要用到AT+CGDCONT和ATD这两条指令
1) AT+CGDCONT=l,"IP”,“CMWAP”
此命令用于设置GPRS接入网关,其中第二个数表示PDP (Packet Data Protocol)
类型为:IP或PPP,第三个数表示接入网关为移动梦网,APN是CMWAP,表示中国移动网应用接口。目前只有中国移动全球通卡才可以使用CMNET功能,而动感地带只能使用CMWAP功能。
2) ATD *99***1#
ATD用于设置拨号方式,进行拨号,并设法进入在线(on-line)状态。与传统的电话线Modem相比较,ATD指令在GPRS中有些变化,采用如下两种格式:
格式一:ATD*99[*[<called address>][*[<L2P>][*[<cid>]]]]#
其中99是个服务码,也可用98的(见格式二),国内一般用99: <called address>是w.x.y.z格式的IP V4地址;<L2P>是用于TE和ME连接的Layer2协议或用于PPP协议的Layer2协议;<cid>是表明PDP上下文的一个数字编号,用AT +CGDCONT命令创建,一般为1, 20
格式二:ATD*98[*<cid>]#
含义同上。
举例如下:
ATD*99# //用服务码99建立一个连接
ATD*99* 123.124.125.126*PPP* 1#//用服务码99建立一个连接
HIP地址123.124.125.124, L2P=PPP
//用CID 1, CID的值由AT十CGDCONT事先
指定
ATD*99***1# //用服务码99建立连接,CID =1,其它用事先指定的值
ATD*98*1#//用服务码98建立一个IP连接,CID =1
国内最常用的是:ATD *99***1#,本设计中就采用了此种格式。
用ATD指令若能拨号上线则返回“CONNECT",否则返回“NO CARRIER"。
这样,就完成了拨号上GPRS网络的功能,即接收到无线模块返回的“CONNECT",说明无线模块已经连上了移动GPRS的WAP网关,之后即为通过三阶段协商建立PPP链路的过程。
PPP协议格式分析
利用AT指令无线模块连接上了中国移动的GPRS的WAP网关之后,接着是进行PPP连接。GPRS拨号采用的是点对点协议(Point to Point Protocol, PPP),该协议是是TCP/IP网络协议包的一个成员。其主要作用是无线模块通过拨号连接上终端服务器后,由PPP取得一个临时的IP地址,使该设备成为网络上的一个节点。只要PPP链路顺利建立成功,获得临时的IP地址,则即可在其上嵌入IP等数据包进行数据传送,完成无线模块的无线网络连接。
PPP协议(Point-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。其目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。
PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。PPP协议包含了以下几个部分:
.链路控制协议LCP (Link Control Protocol):LCP负责创建,维护或终止一次物理连接;
.网络控制协议NCP (Network Control Protocol):NCP是一族协议,负责解决物理连接上运行什么网络协议,以及解决上层网络协议发生的问题;
.认证协议,PPP协议支持两种验证协议:口令验证协议PAP (PasswordAuthentication Protocol)和挑战握手验证协议CHAP (Challenge-Handshake AuthenticationProtocol)。验证过程在PPP协议中为可选项,在连接建立后进行连接者身份验证的目的是为了防止有人在未经授权的情况下成功连接,从而导致泄密。PAP是一种简单的明文验证方式,安全性较差。而CHAP是对PAP的改进,是一种加密的验证方式,使用挑战口令以哈希算法对口令进行加密,用三次握手的方法周期性地检验对端的节点,优点在于密钥不在网络中传送。本课题中采用的是挑战握手验证协议CHAP.
PPP连接的建立主要经过三个阶段,分别是LCP连接协商、CHAP密码认证以及
NCP网络层协议配置。
第一阶段:LCP连接协商
在这个阶段,将对基本的通讯方式进行选择。链路两端设备通过LCP向对方发送LCP数据报配置请求(Configure-Request),对方同意接收后双方互发LCP数据报配置应答(Configure-Ack )。一旦一个配置成功信息包(Configure-Ack packet)被发送且被接收,就完成了交换,进入LCP开启状态。
第二阶段:CHAP密码认证
在这个阶段,客户端会将自己的身份发送给远端的接入服务器。服务器向用户发PPP CHAP安全性认证挑战,接着用户给服务器送PPP CHAP安全性认证响应,服务器再向用户发送 PPP CHAP安全性认证成功。
该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。在认证完成之前,禁止从认证阶段前进到网络层协议阶段。如果认证失败,认证者应该跃迁到链路终止阶段。
第三阶段:NCP网络层协议配置
认证阶段完成之后,PPP将调用在链路创建阶段(阶段一)选定的各种网络控制协议(NCP )。选定的NCP解决PPP链路之上的高层协议问题,例如,在该阶段IP控制协议(IPCP)可以向拨入用户分配动态IP地址。 在这个阶段,先是用户向服务器发送PPP NCP网络控制数据包(网络协议配置,要求服务器提供IP地址和DNS,NBNS信息),接着服务器向用户发送配置请求PPP NCP网络控制数据包(为用户分配IP地址),用户向服务器发送配置应答PPP NCP网络控制数据包(接受所分配的IP地址),最后服务器向用户发送配置应答PPP NCP网络控制数据包(同意用户的IP地址和DNS地址)。
这样,经过三个阶段以后,一条完整的PPP链路就建立起来了,用户即可向服务器
发送IP数据包。
发表评论
-
Android.mk文件解析
2016-01-27 14:01 937以 tools/tradefederation/Androi ... -
NanoHttpd 构建android 手机端的HttpServer
2015-10-20 16:24 2947NanoHttpd是Github上的一个开源项目, 通过下载 ... -
permission denial : android.permission.INTERACT_ACROSS_USERS_FULL
2015-08-05 16:50 5046在android5.0上运行 Runtime.getRun ... -
android getprop() 和 java System.getPropety()
2015-06-04 14:39 63581 System.getPropety()是java中的方 ... -
android cts测试相关
2015-05-27 17:38 0example: -
android uiautomator 相关
2015-05-15 16:53 16951 Runtime.getRuntime().exec 启 ... -
android UI test Espresso
2015-04-10 18:31 1202google android UI测试工具 espresso ... -
android 安全(转)
2014-12-26 12:37 721一 如何不被反编译解析1防止反编译工具的反编译 查看 ... -
nexus related
2014-12-17 15:29 7411 nexus drivers https://deve ... -
git related
2014-12-17 15:24 9671 see all detailed git info ... -
ubuntu android studio 配置和使用
2014-12-10 17:34 3627Ubuntu 64位,Android studio 的安装, ... -
eclipse+ADT+android配置相关
2014-12-05 16:40 14531 eclipse 过旧时,ant 运行不了,会报sdk. ... -
anroid 开发小知识点
2014-10-09 09:52 8231 1)代码 获取APK安装路径和包名 L ... -
androird 内存泄露 浅析
2013-06-19 17:52 1449主要是记录工作中出 ... -
mms 相关链接
2013-03-15 13:53 1395http://blog.chinaunix.net/uid ... -
java层堆栈调用的打印
2012-12-26 15:14 44711. 在指定的函数内打印相关java调用 Log.d ... -
mms 数据包相关
2012-11-26 14:51 22721 抓包 adb shell tcpdump -i any ... -
sms AT指令返回错误代码: CMS errors & CME errors 的区别!
2012-10-26 18:35 12027CMS的是短信中心的返回错误。 CME 是设备返 ... -
sms 发送 radio log
2012-10-26 17:25 4073发送短信:radio.log 关键字 :SEND_SMS ... -
SQLite --函数
2012-09-03 18:22 1987一、日期和时间函数:原文地址SQLite主要支持以下 ...
相关推荐
在Android系统中,RIL是电话模块的一部分,但是在某些情况下,我们需要在非电话模块的其他模块中与RIL进行通信,例如在GPS模块中发送AT命令到Modem。 在Android GPS HAL层实现与RIL的通信中,我们可以使用C语言编写...
在Android系统中,AT(Attention)命令主要用于与硬件模块,如调制解调器或SIM卡进行通信。这些命令遵循Hayes命令集,是通信协议的基础,...正确配置和使用AT命令可以实现与硬件的深度交互,扩展Android设备的功能。
- 与基带接口通信:默认使用AT命令。 由于RIL层主要由C和C++语言编写,并且对外部库的依赖较少,因此它具有很好的移植性,能够较为容易地从Android平台移植到其他基于Linux的操作系统中。 ##### 1.2 移植Android ...
RIL层的通信机制主要使用Socket,内部线程使用管道,与基带接口通过AT命令交互,代码主要由C和C++编写,具有良好的移植性。 1. 移植Android RIL的意义 许多基于Linux的系统,如PC、Qt和OpenWrt路由器平台,需要连接...
5. **短信服务**: 发送和接收短信的流程也通过RIL进行,包括短信编码、解码以及通过AT命令进行传输。 6. **位置信息**: RIL获取并上报基站信息,用于手机定位服务。 **4. RIL的扩展与定制** 由于不同的基带处理器...
分析这些文件可以帮助我们理解RIL层的具体实现,包括模块初始化过程、AT命令的处理逻辑、错误处理机制等。对于想要学习RIL开发或者对Philips 5130平台感兴趣的开发者来说,这是一个宝贵的参考资料。 总之,RIL层...
Android下sierra 3G ril 创建和连接,AT指令交互的完整log.模块为MC8790V。
"Android 中 RIL 层详细分析" Android 中 RIL 层是 Android 操作系统中的一层 middleware,负责将无线硬件设备与电话服务之间的抽象层。RIL 层位于应用程序框架与内核之间,分成了两个部分,一个部分是 rild,它...
RIL是Radio Interface Layer的缩写,它作为一个本地中间层,主要负责将来自上层应用程序和服务的命令传递给基带处理器,并处理来自基带处理器的响应或无请求报告。RIL使用socket通信机制来完成这一过程。 RIL可以...
不过,由于Android系统的安全性和权限管理,直接使用AT命令的方式在现代Android版本中可能会受到限制,更推荐使用Android提供的SMS Manager API或其他官方API来操作短信。在使用AT命令时,应遵循最佳实践,避免对...
RIL层主要通过AT命令与基带处理器进行交互,以实现电话、短信、数据等功能。本文将对RIL流程进行详细分析,涵盖RIL初始化、工作流程图、libril.so、librefrence_ril.so、rild、radiooptions等方面的知识点。 一、...
在"android通话流程浅析RIL层.docx"文档中,可能会详细阐述这些步骤,包括具体的AT命令交互、异常处理以及RIL如何在不同网络模式(如2G、3G、4G)下工作的情况。此外,文档可能还会涉及RIL的多模支持、数据连接的...
3. **Proxy层**:这部分通常位于RIL Proxy内部,负责处理AT命令,并将其转发给RIL Driver。 4. **Driver层**:这部分位于RIL Driver内部,用于解析来自RIL Proxy的数据,并将其转换为无线通信子系统能够处理的命令。...
深入学习Android RIL,不仅需要理解其基本概念和工作流程,还需要熟悉AT命令集,了解如何调试RIL服务,以及如何处理不同网络制式下的通信问题。同时,对于开发人员来说,熟悉Java API的使用和调优技巧也是十分必要的...
这个目录包含了许多与RIL相关的Java和C/C++源文件,这些文件定义了RIL接口、处理RIL消息、解析AT命令响应等功能。例如,`RIL.java`是RIL的主要接口,它提供了诸如注册网络、发起呼叫、发送短信等方法。而`RILRequest...
RIL接收到请求后,将其转化为特定的AT命令发送给基带处理器。 - **数据传输**:基带处理器执行AT命令,并通过RIL返回响应。RIL解析响应,然后将结果转发给发起请求的服务或应用。 - **状态报告**:RIL还负责监听...
本篇文章将深入探讨“RIL_parse.rar”中的内容,特别是针对Windows Mobile平台的RIL实现,以期帮助读者理解RIL的工作原理,并能进行相关的代码分析和调试。 首先,我们关注“RIL_parse.pdf”,这很可能是一份关于...
- **ril_commands.c/h**:处理来自上层应用的RIL命令,如AT命令。 - **ril_telephony.c/h**:处理电话相关的操作,如拨号、接听、挂断等。 - **ril_sms.c/h**:负责短信服务,包括发送、接收和存储短信。 - **ril_...
3. **reference-ril**:这是RIL的一个示例实现,通常基于AT命令集,供设备制造商参考和定制。 #### 二、RIL架构详解 下图展示了RIL在整个Android架构中的位置及其与其他组件的交互关系: ![RIL架构]...