首页 » 智能 » 基于Android电话拨号功能的驱动设计_暗记_芯片

基于Android电话拨号功能的驱动设计_暗记_芯片

南宫静远 2024-12-08 09:43:32 0

扫一扫用手机浏览

文章目录 [+]

(四川大学 电子信息学院, 四川 成都 610065)

:由于Android操作系统开放源码,在近几年被广泛用于各个领域,可以利用Android系统的开放性,开拓该系统在有线电话方面的运用。
将Android平台与拨号芯片MT8880结合起来研究。
由于Android原生代码具有很大局限性,支持的设备太少,所以为了识别MT8880这个特定设备,并掌握MT8880的逻辑输出,须要在Linux内核中添加驱动模块,并在HAL层和JNI层天生动态链接库,使得顶层运用程序可以掌握拨号芯片MT8880。
MT8880芯片紧张用于发送双音多频旗子暗记(Dual Tone Multi Frequency),在加载了拨号驱动和运用程序后,可以实现Android系统的拨号功能。
经测试,设计的拨号驱动能实现对新增设备的掌握,电话运用能成功拨号。

基于Android电话拨号功能的驱动设计_暗记_芯片 基于Android电话拨号功能的驱动设计_暗记_芯片 智能

:Android;Linux内核; HAL; JNI;MT8880芯片

基于Android电话拨号功能的驱动设计_暗记_芯片 基于Android电话拨号功能的驱动设计_暗记_芯片 智能
(图片来自网络侵删)

:TP399文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.09.026

引用格式:牟跃,周渊平.基于Android电话拨号功能的驱动设计[J].微型机与运用,2017,36(9):88-91,99.

0弁言

Android是由Google公司和开放手机同盟领导及开拓、基于Linux内核的开放源代码的操作系统[1]。
Android最近几年景长迅猛,被用于各种场合。
TQ210开拓板搭载的是Android4.0系统,利用的是三星公司生产的S5PV210处理器,能够知足大多数运用处所的需求。
而采取的拨号芯片MT8880能够发送经由滤波处理过的双音多频(Dual Tone Multi Frequency,DTMF)旗子暗记。

电话由于其旗子暗记稳定、抗滋扰能力强、辐射小等优点被广泛用于企业、奇迹机构和个人。
在如今移动设备被各个行业广泛运用的大环境下,可以通过底层驱动的开拓[2],使得Android可以识别外部新增设备。
将Android平台与拨号芯片MT8880结合研究,可以实现Android电话拨号功能。

1硬件系统

1.1硬件框架

Android开拓平台(TQ210开拓板)和MT8880拨号芯片构成了硬件系统的紧张部分[3],如图1所示。
Android平台采取 TQ210 开拓板, TQ210开拓板的核心板为63 mm×53 mm×7 mm的10层板,共有280根引脚。
核心板引出了两路摄像头接口CAMERA_A和CAMERA_B,个中CAMERA_B紧张是开拓板为知足不同开拓需求预留的运用接口,可GPIO口复用,当不用摄像头功能时,可作为GPIO扩展口。
Android的 GPIO接口连接MT8880拨号芯片,利用CAMERA_B的GPIO口与芯片的相应管脚相连接,并通过GPIO口输出高低逻辑电平,对芯片进行掌握,实现发送DTMF旗子暗记的功能。

1.2语音拨号芯片MT8880

MT8880芯片采取ISOCMOS技能制造,具有功耗低和稳定性高档特点,能够比较准确地发送DTMF旗子暗记。
MT8880的发送部分的内部逻辑如图2所示。
从构造上看,在发送与电话号码对应的DTMF旗子暗记之前,必须对寄存器进行相应操作,首先选择对状态寄存器SR和掌握寄存器CRA进行操作,打开旗子暗记音突发选通电路,使芯片能够输出旗子暗记,然后通过掌握寄存器CRB和发送数据寄存器TDR,使得电话号码能够通过D1~D4数据线输入,末了经由行、列计数器和D/A转换器,输出DTMF旗子暗记。
通过RSO及WR和RD口线可对干系寄存器进行选择和掌握,详细掌握功能的实现如表1。
从外部看,可以通过外部微处理器访问其内部的寄存器,以实现DTMF旗子暗记的发送功能。

2软件系统设计

2.1Android源码编译环境的搭建

首先在64位的Ubuntu12.04操作系统中,完成Android源码的编译操作,并在系统中安装和配置JDK,而为了顺利编译Android源码,在系统中还须要安装GCC编译器、干系的库和交叉编译器arm-linux-gcc。
在完成编译环境的搭建后,目标代码便能在其他平台上运行。

2.2拨号功能的软件框架

Android的系统架构与其操作系统一样,采取了分层架构,紧张包括运用程序层、运用程序框架层、系统运行库和核心层[4],如图3所示。
为使Android可以识别拨号芯片MT8880这个特定的新增设备,即通过顶层代码实现对硬件设备的掌握,首先在Linux内核实现了名为tel.c的内核驱动,为系统上层供应了操作底层硬件的接口;然后在HAL层封装掌握逻辑,在JNI层将本地代码封装成上层运用可以调用的Java代码,并天生相应的动态链接库文件即.so文件;末了顶层便可通过调用动态链接库,实现拨号功能。

2.2.1底层驱动设计

底层驱动模块紧张是掌握CAMERA_B上的GPIO管脚,供应掌握MT8880拨号芯片硬件设备接口的逻辑电平,使得系统能够掌握外部芯片MT8880实现拨号。
拨号驱动程序tel.c采取的殽杂型驱动设备miscdevice,紧张由设备的注册misc_register、注销misc_deregister、打开open、关闭close等部分组成。
驱动程序tel.c通过宏S3C_GPIO_SFN(x)对管脚功能进行定义,当x为0时,管脚为输入,x为1时,管脚为输出;通过函数int s3c_gpio_setpull(unsigned int pin, amsung_gpio_pull_t pull)为指定的GPIO管脚配置高下位状态;通过函数int gpio_request(unsigned gpio, const char label)向内核申请管脚,并用label去描述它;通过函数void gpio_free(unsigned gpio)开释一个已经申请的引脚,此函数与gpio_request对应;通过函数int gpio_direction_output(unsigned gpio, int value )在管脚处输出一个电平value(0或者1);通过函数int gpio_direction_input(unsigned gpio)读取;通过函数static unsigned int gpio_cfg_table[]定义了gpio_table数组,这个数组用来定义电话驱动所用的GPIO引脚,统共须要7个引脚,分别为GPI0的0~6口。

2.2.2驱动的编译与安装

将底层驱动程序tel.c文件编写好后放入到/driver/char/mydrivers目录下,并修正该目录下的Kconfig和Makefile文件。
由于利用动态加载驱动程序,以是必须先通过make menuconfig和make modules命令天生.ko文件,运行以上两个命令后其编译结果如图4所示。
然后利用adb devices和adb push命令将tel.ko文件传送到开拓板上,并通过adb shell 命令进入到Android Shell命令模式,即切换到开拓板,末了利用insmod 命令将tel.ko模块加载到开拓板上。
利用以上命令后,其编译结果如图5所示。

2.3HAL层软件

硬件抽象层(Hardware Abstraction Layer,HAL)位于Linux内核上面一层[5],其详细位置如图6所示。
HAL层紧张用于隐蔽底层驱动的业务逻辑,即顶层调用底层驱动的详细细节,这样就能够摆脱Linux开源束缚,使关于驱动开拓的详细细节不用公开,得到保护。

编译 HAL 层库文件方法如下:

(1)首先在 hardware/libhardware/include 目录下创建tel.h 头文件。
tel.h头文件紧张用于定义hw_module_t、hw_device和hw_module_methods这三个主要的关系紧密的构造体。
tel.h也为HAL模块定义了一个ID,通过这个ID来查找tel的HAL模块。

(2)然后须要在device/embedsky/tq21目录下创建名为libwiretelephone的文件夹,在该文件夹中添加tel.c、Android.mk 两个文件。
在HAl层实现了所有拨号驱动的业务逻辑, 在HAL层通过对GPIO口的掌握实现对MT8880拨号芯片发送部分的掌握,使芯片能够发出双音多频(DTMF)旗子暗记。

(3)运行mmm device/embedsky/tq210/libtel命令天生tel.tq210.so文件,然后将文件复制到开拓板上的/system/lib/hw目录。
末了通过adb device命令和adb push命令将tel.tq210.so文件加载到开拓板上[6],运行以上命令后,编译结果如图7所示。

2.4JNI层软件

JNI(Java Native Interface)层指的是本地编程接口[7],其事情事理图如图8所示。
紧张使Java编写的运用程序和用C、C++编写的底层驱动及一些本地链接库能够实现信息的交互。

编译 JNI 层库文件的方法如下:

(1)在Android 文件系统下的 packages /apps 下创建一个名为libtel的文件夹, 再在该文件夹中创建 jni 文件夹,在jni文件夹中创建tel.cpp 和Androi d.mk 文件。
在tel.cpp文件中,通过JNINativeMethod定义了JNI函数的映射。
通过 registe_android_server_telService(JNIEnv env)函数将JNI程序库与Java类绑定,系统在成功装载JNI共享库后会自动调用JNI_Onload函数,用于初始化JNI模块。

(2)在packages/apps/ Wiretelephone/jni/ 目录下运行mmm,天生libtel.so动态共享库[8],然后利用cp命令将天生的文件复制到开拓板对应的out/target/product/tq210/rootfs_dir/system/lib目录下。
末了通过adb device命令和adb push命令将tel.tq210.so文件加载到开拓板上,运行以上命令,其编译成功后,结果如图9所示。

3驱动程序测试

在TQ210开拓板中加载电话拨号程序的APP层程序后,测试驱动能否正常运行,实现其干系功能,有如下几步:

(1)将TQ210开拓板的干系GPIO接口与示波器相连接,打开开拓板和示波器电源,通过拨号界面拨号时,示波器上涌现对应的电平波形,即干系GPIO接口能够实现输出功能,内核驱动实现了对通用接口的掌握。

(2)将TQ210开拓板、MT8880芯片和电话连接起来,在拨号界面进行拨号, 经测试能顺利拨通,即可以掌握MT8880芯片产生DTMF旗子暗记。

经由以上测试,该驱动程序实现了对MT8880芯片的掌握,使全体系统在加载了APP程序后能够实现拨号功能,如图10所示。

4结束语

通过以上测试,解释该驱动程序能够实现对MT8880芯片的掌握,即Android可以通过新增驱动模块识别特定设备,在加载了运用层程序后能够通过MT8880拨号芯片实现完全的DTMF旗子暗记发送功能。
即通过开拓板的通用GPIO口操纵拨号掌握芯片,实现语音拨号功能,可以通过在Linux Kernel中添加新的驱动模块,使得Android能够识别添加的特定硬件设备。
在本文根本上,如果再添加来电显示的驱动,掌握MT8880的寄存器的设置,实现来电显示掌握,就可以组成一个完全的电话系统。

参考文献

[1] 宋小倩,周东升.基于 Android 平台的运用开拓研究[J].软件导刊,2011,10(2):104-106.

[2] 宋宝华.Linux 设备驱动开拓详解(第2版)[M].北京:公民邮电出版社,2010.

[3] 杜江,周渊平.基于 Android的电话拨号功能[J]. 打算机系统运用, 2014(12):245-248.

[4] 姚昱旻,刘卫国.Android 的架构与运用开拓研究[J].打算机系统运用,2008,17(11):110-112.

[5] 李宁.Android深度探索(卷1): HAL与驱动开拓[M].北京:公民邮电出版社,2013.

[6] 付兴武,张军,王洋.基于 SPI 总线协议的字符设备驱动程序[J].打算机系统运用,2013(2):146150.

[7] 李宁.Android开拓威信指南(第2版)[M].北京:公民邮电出版社,2013.

[8] 嫡科技.Android 从入门到精通[M].北京:清华大学出版社, 2012.

标签:

相关文章

电源反转芯片HT7660_电压_负载

一、序言  购买的 开关电容电源反向转换芯片 HT7660 到货了。在自己的电路设计中,常常利用它作为局部负电压电压源。下面对于它...

智能 2024-12-12 阅读0 评论0

竖立节能智能车_车模_单片机

全国大学生智能汽车竞赛是一项以“立足培养、重在参与、鼓励探索、追求卓越”为辅导思想,面向全国大学生开展的具有探索性的工程实践活动。...

智能 2024-12-11 阅读0 评论0