999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Android電話撥號功能的驅動設計

2017-05-25 00:37:36周淵平
網絡安全與數據管理 2017年9期
關鍵詞:信號功能

牟 躍,周淵平

(四川大學 電子信息學院, 四川 成都 610065)

基于Android電話撥號功能的驅動設計

牟 躍,周淵平

(四川大學 電子信息學院, 四川 成都 610065)

由于Android操作系統開放源碼,在近幾年被廣泛用于各個領域,可以利用Android系統的開放性,開發該系統在有線電話方面的應用。將Android平臺與撥號芯片MT8880結合起來研究。因為Android原生代碼具有很大局限性,支持的設備太少,所以為了識別MT8880這個特定設備,并控制MT8880的邏輯輸出,需要在Linux內核中添加驅動模塊,并在HAL層和JNI層生成動態鏈接庫,使得頂層應用程序可以控制撥號芯片MT8880。MT8880芯片主要用于發送雙音多頻信號(Dual Tone Multi Frequency),在加載了撥號驅動和應用程序后,可以實現Android系統的撥號功能。經測試,設計的撥號驅動能實現對新增設備的控制,電話應用能成功撥號。

Android;Linux內核; HAL; JNI;MT8880芯片

0 引言

圖1 系統框架圖

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 MT8880發送部分內部結構框圖

RSOWRRD功能001寫發送數據寄存器10讀接收數據寄存器101寫控制寄存器10讀狀態寄存器

2 軟件系統設計

2.1 Android源碼編譯環境的搭建

首先在64位的Ubuntu12.04操作系統中,完成Android源碼的編譯操作,并在系統中安裝和配置JDK,而為了順利編譯Android源碼,在系統中還需要安裝GCC編譯器、相關的庫和交叉編譯器arm-linux-gcc。在完成編譯環境的搭建后,目標代碼便能在其他平臺上運行。

2.2 撥號功能的軟件框架

Android的系統架構與其操作系統一樣,采用了分層架構,主要包括應用程序層、應用程序框架層、系統運行庫和核心層[4],如圖3所示。為使Android可以識別撥號芯片MT8880這個特定的新增設備,即通過頂層代碼實現對硬件設備的控制,首先在Linux內核實現了名為tel.c的內核驅動,為系統上層提供了操作底層硬件的接口;然后在HAL層封裝控制邏輯,在JNI層將本地代碼封裝成上層應用可以調用的Java代碼,并生成相應的動態鏈接庫文件即.so文件;最后頂層便可通過調用動態鏈接庫,實現撥號功能。

圖3 系統軟件框架圖

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所示。

圖4 生成模板并傳遞到開發板上

圖5 加載模塊

2.3 HAL層軟件

硬件抽象層(Hardware Abstraction Layer,HAL)位于Linux內核上面一層[5],其具體位置如圖6所示。HAL層主要用于隱藏底層驅動的業務邏輯,即頂層調用底層驅動的具體細節,這樣就能夠擺脫Linux開源束縛,使關于驅動開發的具體細節不用公開,得到保護。

圖6 新HAL架構

編譯 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所示。

圖7 編譯 HAL 層庫文件

2.4 JNI層軟件

JNI(Java Native Interface)層指的是本地編程接口[7],其工作原理圖如圖8所示。主要使Java編寫的應用程序和用C、C++編寫的底層驅動及一些本地鏈接庫能夠實現信息的交互。

圖8 JNI原理圖

編譯 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所示。

圖9 編譯JNI層庫文件

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.

周淵平(1955-), 男, 教授,博士生導師,主要研究方向:通信與信息系統、信號與信息處理。

Design of driver based on Android phone dialing function

Mou Yue, Zhou Yuanping

(College of Electronic Information, Sichuan University, Chengdu 610065, China)

Android is an open operating system based on the Linux Kernel,and it is widely used in a variety of mobile devices.This article combines the Android platform with the dial-up chip MT8880. Android native code supports very few devices,so we need to add a new low-level driver module in Linux Kernel,through the dynamic link libraries which are generated in the HAL layer and JNI layer,so that Android can identify a specific device MT8880,and control the logic output of MT8880.After loading the application,MT8880 chip can send Dual Tone Multi Frequency (DTMF) signal,finally realize Android system dial-up function. After testing,the dial-up driver can control the new device,the phone application can dial successfully.

Android; Linux Kernel; HAL; JNI;MT8880 chip

TP399

A

10.19358/j.issn.1674- 7720.2017.09.026

牟躍,周淵平.基于Android電話撥號功能的驅動設計[J].微型機與應用,2017,36(9):88-91,99.

2016-12-13)

牟躍(1992-),女, 碩士研究生,主要研究方向:信號與信息處理。

猜你喜歡
信號功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
孩子停止長個的信號
關于非首都功能疏解的幾點思考
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達功能
基于LabVIEW的力加載信號采集與PID控制
一種基于極大似然估計的信號盲抽取算法
中西醫結合治療甲狀腺功能亢進癥31例
主站蜘蛛池模板: A级毛片无码久久精品免费| 国产精品久久国产精麻豆99网站| 亚洲三级网站| 超清无码一区二区三区| 一级毛片免费播放视频| 伊人久久福利中文字幕| 国产亚洲欧美另类一区二区| 大香伊人久久| 天天干天天色综合网| 欧美a√在线| 国产在线高清一级毛片| 真实国产乱子伦视频| 国产草草影院18成年视频| 成人在线综合| 精品福利网| 久久精品亚洲中文字幕乱码| 国产精品综合色区在线观看| 亚洲视频免费播放| 国产精品林美惠子在线播放| 亚洲AV成人一区国产精品| 国产 日韩 欧美 第二页| 亚洲国产天堂久久综合226114| 亚洲另类第一页| 亚洲天堂.com| 久久精品亚洲专区| 国产精品亚欧美一区二区| a毛片在线播放| 久久伊伊香蕉综合精品| 亚洲精品动漫| 五月天久久综合| 天天爽免费视频| 丁香婷婷激情综合激情| av免费在线观看美女叉开腿| 久无码久无码av无码| 思思热在线视频精品| 国产精品无码AV片在线观看播放| 天天综合色网| 免费久久一级欧美特大黄| 热伊人99re久久精品最新地| 香蕉色综合| 中文字幕av一区二区三区欲色| vvvv98国产成人综合青青| 91美女视频在线| 一区二区三区在线不卡免费| 全午夜免费一级毛片| 网友自拍视频精品区| 亚洲欧美色中文字幕| 欧美日韩在线亚洲国产人| 日韩天堂网| 久久综合五月| 亚洲欧洲综合| 91原创视频在线| 一级不卡毛片| 国产成人夜色91| 99视频精品在线观看| 日韩天堂在线观看| 精品免费在线视频| 在线欧美一区| 91欧美在线| 成人在线亚洲| 成人在线不卡视频| 国产成人精品一区二区秒拍1o| 久久久噜噜噜久久中文字幕色伊伊 | 免费人欧美成又黄又爽的视频| 国产成人无码Av在线播放无广告| 国产在线观看91精品亚瑟| 国产精品嫩草影院视频| 玖玖精品视频在线观看| 真实国产精品vr专区| 国产香蕉97碰碰视频VA碰碰看| 亚洲国产日韩一区| 欧美性天天| 久久人妻xunleige无码| 国产熟女一级毛片| 特级欧美视频aaaaaa| 国产真实乱人视频| 综1合AV在线播放| 久久精品无码一区二区国产区| 91精品网站| 久久婷婷六月| 性视频久久| 国产午夜福利亚洲第一|