android耳機插入檢測

來源:互聯網
上載者:User

Android
的耳機檢測其實代碼改動很少的

也是因為少吧,所以一直沒寫文檔。

就這麼拖了將近兩個月。

驅動程式有三個實現版本:

其一是:drivers/char/micco_hsdetect.c
它通過kobject_uevent 上報狀態給使用者空間。

其二是:drivers/input/keyboard/micco_keys.c
它通過 input_report_switch上報事件給使用者空間。

其三是:drivers/switch/switch_micco.c
註冊了一個switch_dev,這個好像是android平台專用的。

參考自:http://blog.csdn.net/absurd/archive/2009/11/01/4754912.aspx

我是用第三種方法做的。

一、在littleton.c中註冊platform_device如下:

#ifdef CONFIG_SWITCH_GPIO
static struct gpio_switch_platform_data headset_switch_data = {
       .name = "h2w",
       .gpio = 127,      
};

static struct platform_device headset_switch_device = {
       .name             = "switch-gpio",
       .dev = {
               .platform_data    = &headset_switch_data,
       }
};

#endif

littleton_init()中註冊platform_device ,包括增加的headset_switch_device。

其中gpio_switch_platform_data 的name可以隨意,但必須與上層的路徑相符,gpio號為耳機檢測的中斷GPIO,這裡的127是指PXA310的GPIO127。

platform_device 的name為/drivers/switch/switch_gpio.c中註冊的platform_driver的name。

static struct platform_driver gpio_switch_driver = {
.probe  = gpio_switch_probe,
.remove  = __devexit_p(gpio_switch_remove),
.driver  = {
  .name = "switch-gpio",
  .owner = THIS_MODULE,
},
};

註冊成功後可以使用shell查看開發板中/sys/class/switch目錄下多了一個檔案夾h2w。

二、 switch_gpio.c上報訊息。

gpio_switch_probe申請中斷,在中斷處理gpio_irq_handler
()函數中採用schedule_work調用gpio_switch_work。在gpio_switch_work()中通過擷取中斷
GPIO(GPIO_127)的高低電平確定state,並將state通過switch_class.c的switch_set_state()函數上
報。(最好畫一下流程圖)

下載運行開發板,查看開發板中/sys/class/switch/h2w,可以看到包含name、state等內容(查看補充),在沒有插入耳機時cat state 結果為0,插入耳機後cat state 結果為1.

三、 上層HeadsetObserver.java修改(/frameworks/base/services/java/com/android/server)

上層HeadsetObserver.java通過底層上報的state決定如何?通道切換。

  需修改如下:

//private static final String HEADSET_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/h2w";

private static final String HEADSET_UEVENT_MATCH = "DEVPATH=/class/switch/h2w";

參考資料 :http://groups.google
.com/group/a ... ad/41a261bc4498a7c4

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.