《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Android電話撥號功能的驅動設計
基于Android電話撥號功能的驅動設計
2017年微型機與應用第9期
牟躍,周淵平
四川大學 電子信息學院, 四川 成都 610065
摘要: 由于Android操作系統開放源碼,在近幾年被廣泛用于各個領域,可以利用Android系統的開放性,開發該系統在有線電話方面的應用。將Android平臺與撥號芯片MT8880結合起來研究。因為Android原生代碼具有很大局限性,支持的設備太少,所以為了識別MT8880這個特定設備,并控制MT8880的邏輯輸出,需要在Linux內核中添加驅動模塊,并在HAL層和JNI層生成動態鏈接庫,使得頂層應用程序可以控制撥號芯片MT8880。MT8880芯片主要用于發送雙音多頻信號(Dual Tone Multi Frequency),在加載了撥號驅動和應用程序后,可以實現Android系統的撥號功能。經測試,設計的撥號驅動能實現對新增設備的控制,電話應用能成功撥號。
Abstract:
Key words :

  牟躍,周淵平

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

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

  關鍵詞Android;Linux內核; HAL; JNI;MT8880芯片

  中圖分類號: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硬件框架

001.jpg

  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信號的發送功能。

  

002.jpg

 

010.jpg

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文件;最后頂層便可通過調用動態鏈接庫,實現撥號功能。

003.jpg

  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驅動的編譯與安裝

004.jpg

  將底層驅動程序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所示。

  

004.jpg

  2.3HAL層軟件

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

005.jpg

    編譯 HAL 層庫文件方法如下:

 ?。?)首先在 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)信號。

 ?。?)運行mmm device/embedsky/tq210/libtel命令生成tel.tq210.so文件,然后將文件復制到開發板上的/system/lib/hw目錄。最后通過adb device命令和adb push命令將tel.tq210.so文件加載到開發板上[6],運行以上命令后,編譯結果如圖7所示。

006.jpg

  2.4JNI層軟件

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

007.jpg

  編譯 JNI 層庫文件的方法如下:

 ?。?)在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模塊。

 ?。?)在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所示。

  

008.jpg

3驅動程序測試

  在TQ210開發板中加載電話撥號程序的APP層程序后,測試驅動能否正常運行,實現其相關功能,有如下幾步:

  (1)將TQ210開發板的相關GPIO接口與示波器相連接,打開開發板和示波器電源,通過撥號界面撥號時,示波器上出現對應的電平波形,即相關GPIO接口能夠實現輸出功能,內核驅動實現了對通用接口的控制。

  (2)將TQ210開發板、MT8880芯片和電話連接起來,在撥號界面進行撥號, 經測試能順利撥通,即可以控制MT8880芯片產生DTMF信號。

  經過以上測試,該驅動程序實現了對MT8880芯片的控制,使整個系統在加載了APP程序后能夠實現撥號功能,如圖10所示。

009.jpg

4結束語

  通過以上測試,說明該驅動程序能夠實現對MT8880芯片的控制,即Android可以通過新增驅動模塊識別特定設備,在加載了應用層程序后能夠通過MT8880撥號芯片實現完整的DTMF信號發送功能。即通過開發板的通用GPIO口操縱撥號控制芯片,實現語音撥號功能,可以通過在Linux Kernel中添加新的驅動模塊,使得Android能夠識別添加的特定硬件設備。在本文基礎上,如果再添加來電顯示的驅動,控制MT8880的寄存器的設置,實現來電顯示控制,就可以組成一個完整的電話系統。

  參考文獻

  [1] 宋小倩,周東升.基于 Android 平臺的應用開發研究[J].軟件導刊,2011,10(2):104-106.

 ?。?] 宋寶華.Linux 設備驅動開發詳解(第2版)[M].北京:人民郵電出版社,2010.

  [3] 杜江,周淵平.基于 Android的電話撥號功能[J]. 計算機系統應用, 2014(12):245-248.

 ?。?] 姚昱旻,劉衛國.Android 的架構與應用開發研究[J].計算機系統應用,2008,17(11):110-112.

 ?。?] 李寧.Android深度探索(卷1): HAL與驅動開發[M].北京:人民郵電出版社,2013.

 ?。?] 付興武,張軍,王洋.基于 SPI 總線協議的字符設備驅動程序[J].計算機系統應用,2013(2):146150.

 ?。?] 李寧.Android開發權威指南(第2版)[M].北京:人民郵電出版社,2013.

 ?。?] 明日科技.Android 從入門到精通[M].北京:清華大學出版社, 2012.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          午夜国产欧美理论在线播放| 一区二区高清视频在线观看| 亚洲国产精品久久久久秋霞蜜臀| 麻豆精品精品国产自在97香蕉| 欧美xxx在线观看| 欧美精品自拍| 日韩亚洲在线观看| 一区二区在线观看av| 欧美大学生性色视频| 亚洲午夜精品一区二区三区他趣| 亚洲欧美视频一区二区三区| 亚洲欧美日韩国产中文| 欧美日韩精品一本二本三本| 久久久精品性| 久久中文字幕一区| 亚洲国产精品www| 久久中文欧美| 久久久久久久久久久一区| 国产欧美在线观看一区| 亚洲精品日韩在线| 国产一区二区三区免费观看| 国产精品99久久不卡二区| 亚洲一区三区视频在线观看| 亚洲欧美日韩成人高清在线一区| 国产婷婷色一区二区三区| 亚洲国产成人在线| 欧美日韩色婷婷| 欧美激情一区二区在线| 欧美一区二视频在线免费观看| 亚洲欧美成人网| 欧美国产日韩一区二区| 亚洲狼人精品一区二区三区| 久久综合色88| 日韩小视频在线观看| 国产精品盗摄久久久| 99精品视频一区二区三区| 欧美激情网站在线观看| 欧美综合国产精品久久丁香| 亚洲区免费影片| 国产日本欧美视频| 一本色道综合亚洲| 久久精品视频网| 国产视频久久久久| 亚洲成人资源网| 亚洲靠逼com| 欧美大片网址| 99精品久久免费看蜜臀剧情介绍| 久久久久免费视频| 欧美精品一区二区三| 久久精品国产99精品国产亚洲性色| 亚洲欧美国产精品桃花| 亚洲综合精品一区二区| 久久久精彩视频| 午夜精品久久久久久久男人的天堂| 国产一区二区三区直播精品电影| 91久久精品一区二区三区| 欧美国产亚洲精品久久久8v| 国产精品mv在线观看| 亚洲精品韩国| 欧美一区国产在线| 久久久99精品免费观看不卡| 欧美一区二区精品久久911| 一区二区三区波多野结衣在线观看| 欧美韩国一区| 国语自产精品视频在线看| 亚洲一区二区三区高清不卡| 国产伦一区二区三区色一情| 亚洲动漫精品| 欧美精品情趣视频| 欧美日韩国产丝袜另类| 国产精品自拍视频| 欧美日韩国产综合久久| 国产欧美亚洲视频| 欧美日本在线观看| 亚洲免费视频观看| 欧美日韩成人在线观看| 99这里只有久久精品视频| 国产日韩欧美亚洲一区| 国产伦精品一区二区三区视频孕妇| 久久不射网站| 国产精品入口日韩视频大尺度| 国产精品日韩在线播放| 亚洲第一在线| 亚洲激情六月丁香| 亚洲欧洲精品一区二区三区| 国产亚洲激情视频在线| 亚洲一区二区视频在线| 亚洲精品视频在线观看免费| 欧美精品一区二区蜜臀亚洲| 久久精品国产免费| 亚洲精品小视频| 午夜激情一区| 免费观看成人www动漫视频| 欧美午夜女人视频在线| 久久精品国产在热久久| 久久婷婷av| 国产精品亚洲а∨天堂免在线| 亚洲国产精品久久久| 欧美精品少妇一区二区三区| 久久精品五月| 久久久亚洲综合| 欧美淫片网站| 欧美日韩三级| 尤物九九久久国产精品的特点| 欧美成人精品不卡视频在线观看| 欧美一级艳片视频免费观看| 欧美日韩综合视频网址| 伊人久久av导航| 亚洲激情黄色| 久久精品网址| 久久黄色网页| 在线观看成人av电影| 韩国在线视频一区| 欧美一区2区三区4区公司二百| 精久久久久久| 欧美日韩国产91| 亚洲无线观看| 欧美大片18| 国产一区二区三区久久久| 亚洲女同同性videoxma| 亚洲精品国产精品国自产观看| 欧美日韩综合在线免费观看| 亚洲精品欧美专区| 欧美日韩高清不卡| 国产精品久久久久影院色老大| 欧美日韩一区二| 亚洲国产欧美在线人成| 在线视频国产日韩| 国产亚洲精品福利| 国产精品乱看| 亚洲欧美日本精品| 亚洲人成网站999久久久综合| 国产精品天天摸av网| 欧美中文字幕在线播放| 亚洲小视频在线观看| 好吊一区二区三区| 欧美风情在线| 欧美色视频在线| 久久精品国产亚洲一区二区三区| 国产精品久久久久久久久婷婷| 国产片一区二区| 国产精品人人做人人爽人人添| 国产区精品视频| 一本色道久久综合亚洲精品不卡| 男女av一区三区二区色多| 亚洲午夜激情免费视频| 欧美午夜无遮挡| 久久大香伊蕉在人线观看热2| 国产精品久久福利| 国产日韩高清一区二区三区在线| 亚洲小少妇裸体bbw| 亚洲乱码久久| 亚洲日本成人网| 精品动漫3d一区二区三区免费版| 国产久一道中文一区| 久久成人久久爱| 日韩亚洲视频| 一区二区三区波多野结衣在线观看| 欧美日韩成人综合| 久久久久久欧美| 开心色5月久久精品| 欧美高清视频一区二区三区在线观看| 亚洲黄页视频免费观看| 欧美a级片网| 一本大道久久a久久综合婷婷| 久久久国产午夜精品| 国产精品爱久久久久久久| 国产亚洲一区在线| 欧美激情精品久久久久久变态| 亚洲欧美在线看| 性xx色xx综合久久久xx| 欧美激情在线| 欧美日韩精品二区| 国产精品视频第一区| 久久激情五月丁香伊人| 亚洲一区二区三区在线观看视频| 亚洲国产精品一区二区久| 亚洲资源在线观看| 久久综合色88| 亚洲精品护士| 国产精品v欧美精品v日本精品动漫| 国产精品久久一区主播| 欧美日本精品在线| 国产精品一区视频| 久久精品五月婷婷| 亚洲日本中文字幕免费在线不卡| 韩日在线一区| 女主播福利一区| 国产一区二区日韩| 久久综合网hezyo| 欧美日韩精品一区二区三区| 一区二区三区免费看| 午夜精品电影| 久久综合一区二区| 亚洲激情一区二区| 欧美a级在线| 欧美成人精品1314www| 国产精品美女久久久久av超清| 久久久777| 一区二区三区.www| 欧美精品在线观看91| 免费成人黄色片| 国产精品黄视频| 亚洲视频网在线直播| 亚洲精品一区二区三区不| 欧美视频在线观看视频极品| 久久久久88色偷偷免费| 欧美一区二区免费| 久久久精彩视频| 国产偷自视频区视频一区二区| 一本到12不卡视频在线dvd| 欧美日韩八区| 亚洲国产一区二区三区在线播| 免费亚洲网站| 久久久久久成人| 一个色综合av| 欧美成年人视频| 亚洲日本精品国产第一区| 亚洲手机成人高清视频| 欧美日韩在线三级| 亚洲在线观看| 亚洲欧洲偷拍精品| 午夜视频久久久| 国产精品免费一区二区三区在线观看| 国产一区二区三区在线观看视频| 亚洲人成在线观看| 黄色在线成人| 99综合电影在线视频| 亚洲国产精品123| 欧美视频日韩视频在线观看| 久久久国产精彩视频美女艺术照福利| 欧美国产精品劲爆| 国产啪精品视频| 亚洲午夜一级| 亚洲电影在线免费观看| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲毛片在线观看.| 欧美色图一区二区三区| 亚洲乱亚洲高清| av不卡在线观看| 久久久久国产成人精品亚洲午夜| 亚洲欧美中日韩| 欧美日韩综合在线免费观看| 国产精品高潮呻吟视频| 久久久爽爽爽美女图片| 在线国产精品一区| 欧美影片第一页| 国产精品第13页| 99视频精品全国免费| 欧美视频官网| 国产精品高清在线| 久久九九国产| 宅男精品导航| 亚洲精品免费网站| 亚洲电影免费观看高清完整版在线观看| 国产欧美精品在线| 亚洲淫性视频| 欧美成人精品高清在线播放| 玖玖综合伊人| 国产精品一区二区三区久久久| 欧美日韩国产999| 欧美午夜在线| 国产麻豆精品视频| 国产精品美女久久久久久2018| 欧美激情一区在线观看| 午夜欧美精品久久久久久久| 欧美1区3d| 欧美一区二区三区免费视频| 91久久精品国产91性色tv| 欧美gay视频激情| 亚洲影院免费观看| 欧美高清视频一区二区三区在线观看| 亚洲精品老司机| 久久精品亚洲精品国产欧美kt∨| 亚洲国产专区校园欧美| 久久久国产精品一区二区中文| 亚洲欧美精品| 欧美日韩精品一区二区在线播放| 午夜精品一区二区三区在线| 中国女人久久久| 欧美高清视频免费观看| 午夜免费电影一区在线观看| 亚洲一区二区三区精品在线| 欧美xart系列在线观看| 亚洲男人第一av网站| 午夜精品久久99蜜桃的功能介绍| 99国内精品久久久久久久软件| 宅男噜噜噜66一区二区66| 一本大道久久a久久精二百| 亚洲第一综合天堂另类专| 亚洲人午夜精品免费| 亚洲清纯自拍| 国产精品99久久久久久人| 亚洲一区在线观看免费观看电影高清| 久久久久国产精品一区二区| 久久国产精品一区二区三区| 欧美了一区在线观看| 亚洲裸体俱乐部裸体舞表演av| 香蕉国产精品偷在线观看不卡| 国产精品va在线播放我和闺蜜| 性久久久久久久久久久久| 欧美日韩一卡二卡| 国产精品狼人久久影院观看方式| 欧美一区不卡| 国产一区二区精品在线观看| 欧美伊人久久| 在线观看视频一区二区欧美日韩| 欧美日韩国产三区| 欧美日韩另类字幕中文| 亚洲欧美一区二区三区极速播放| 亚洲美女黄网| 欧美三级电影精品| 在线电影院国产精品| 国产精品免费观看视频| 欧美色123| 久久不射网站| 一本一本久久a久久精品牛牛影视| 免费观看欧美在线视频的网站| 99re6热只有精品免费观看| 亚洲国产美国国产综合一区二区| 久久久之久亚州精品露出| 国产精品视频专区| 国产一区二区精品久久99| 欧美激情1区2区3区| 一区在线播放视频| 亚洲午夜久久久| 亚洲片在线资源| 国产精品xnxxcom|