摘要: 摘要在之前的文章中提到,对于oFono来说所有的操作都是异步的。这也就是说,oFono必须要提供一套机制来通知对象它所关心的事件发生了。依赖这套机制,也使得atom发现及atom间交流成为可能。本文主要试图讲述我所理解的oFono的事件机制。1. oFono事件机制为了不让我们在代码中迷失,我们应该对oFono的事件机制有一个大体的概念,这一节主要给出了一个oFono事件机制的overview。oFono的内部采用的是异步事件机制,具体上来说使用的是Publish/Subcribe模型来实现的。采用异步事件机制可以降低模块间的耦合度(Loose Coupling),提高系统的扩展性。图1.1给 阅读全文
posted @ 2013-07-05 11:19 ZHX_1Q89 阅读(1314) 评论(0) 推荐(0) 编辑
摘要: 摘要主要说明oFono启动流程。1.启动分析 1 int main(int argc, char **argv) 2 { 3 /*....*/ 4 g_dbus_set_disconnect_function(conn, system_bus_disconnected, 5 NULL, NULL); 6 7 __ofono_dbus_init(conn);/*(1)*/ 8 9 __ofono_modemwatch_init();/*(2)*/10 11 __ofono_manager_init();/*(3)... 阅读全文
posted @ 2013-07-04 15:50 ZHX_1Q89 阅读(1455) 评论(0) 推荐(0) 编辑
摘要: 摘要本文主要对oFono中的四大核心部件的概念进行整理。主要是翻译oFono的官方doc四大核心部件1.1 Core DaemonCore Daemon提供了供oFono内部使用的一些服务。这些服务包括,将drivers和plugins载入到oFono中;Atoms部件的发现及Atom设备间交流;和PDU短信相关的编码,解码,分段的APIs;读写SIM以及解释EF文件的APIs;设置字符集转换的APIs;与小区广播(cell broadcast)相关的APIs;Daemon的另一个主要职责是对modem进行抽象。每一个设备都是独立管理的,并且系统中的设备可以并存。这也就是说,双卡双待对于oFo 阅读全文
posted @ 2013-07-04 15:12 ZHX_1Q89 阅读(1865) 评论(0) 推荐(0) 编辑
摘要: 摘要在从IO收到GSM/GPRS模块回传的数据后,就可以按照一定的规则解析这些命令。熟悉Android的朋友可能会想起RIL架构中readline以及process_line这两个函数,一个负责接受一行数据,一个负责对这一行数据进行解析。在GATChat这个库中,将解析这个过程抽象成了一个GATSyntax对象,方便用户进行扩展操作。并分别提供了两个不同的GATSyntax的实现。1. GATSyntax1 struct _GAtSyntax {2 gint ref_count;3 int state;4 GAtSyntaxSetHintFunc set_hint;5 ... 阅读全文
posted @ 2013-07-03 09:24 ZHX_1Q89 阅读(1032) 评论(0) 推荐(0) 编辑
摘要: 摘要:本文主要讲述GAtChat库接收AT命令的过程。1. AT命令结果接收在创建at_chat的过程中,我们会创建一个GAtIO对象。在该对象创建之后,会向主时间循环中添加一个IO可读的监视事件。当发现IO中存在数据时,调用received_data函数来接收,并把接收到的数据上传给上层gatchat进行返回结果的解析。 1 static GAtIO *create_io(GIOChannel *channel, GIOFlags flags) 2 { 3 /*...*/ 4 io->channel = channel; 5 io->read_watch = g_io... 阅读全文
posted @ 2013-07-02 15:59 ZHX_1Q89 阅读(1123) 评论(0) 推荐(0) 编辑
摘要: 摘要:本文主要描述了GAtChat如何发送AT命令的全过程1. GAtChat AT命令发送接口在GAtChat库当中,根据AT命令返回结果的不同,GAtChat定义了四种不同的发送接口:一般发送接口,表单发送接口,PDU表单发送接口以及等待提示发送接口。 1 /*一般发送接口*/ 2 guint g_at_chat_send(GAtChat *chat, const char *cmd, 3 const char **prefix_list, GAtResultFunc func, 4 gpointer user_data, GDestroyN... 阅读全文
posted @ 2013-07-02 14:59 ZHX_1Q89 阅读(1381) 评论(0) 推荐(0) 编辑
摘要: 1. 背景回顾一下当今智能手机的架构。目前,很多智能手机都是采用双处理器架构:一个处理器用来运行操作系统相关的工作,应用程序都是运行在这个上面,所以这个处理器又叫Application Processor(AP),一个处理器用来负责和无线射频通讯相关的工作,即Baseband Processor(BP)。AP与BP之间最常见的是使用串口相连接。AP与BP之间通讯协议就是AT命令。当下,每一个Mobile OS都有自己的一套机制来解决AP与BP之间的AT通讯问题。Android中使用Rild,而在Tizen IVI中,则是使用Ofono这个开源架构。而oFono中使用GATChat这个库来实现A 阅读全文
posted @ 2013-07-02 11:32 ZHX_1Q89 阅读(2106) 评论(4) 推荐(0) 编辑