Android平臺中MCE USB設備支持

    應用程序需要對MCE Usb設備進行操作。首先使用UsbManager的getDeviceList接口獲取USB設備列表時,引發PackageManager.PERMISSION_DENIED異常。 應用程序的確已經在AndroidManifest.xml中聲明瞭所需的權限,所以從Framework層找問題的原因。

    首先看out目錄下/system/etc/permissions,發現缺少android.hardware.usb.host.xml。在device.mk中


PRODUCT_COPY_FILES += \
        frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml



    爲節約時間不重新編譯了,將該文件push到設備中,發現異常依舊。查看其他設備的權限文件,發現系統開放的設備訪問權限都被寫在了這個文件中:system/etc/permissions/handheld_core_hardware.xml。照樣添加:

<feature name="android.hardware.usb.host" />




    這次再次打開應用程序,已經不再報PackageManager.PERMISSION_DENIED的異常,但是usb設備無法工作。應該是內核原因。打開內核開關對MCE、LIRC的支持:

CONFIG_LIRC=y
CONFIG_IR_LIRC_CODEC=y
CONFIG_IR_MCEUSB=y
CONFIG_LIRC_STAGING=y


    現在設備已經可以被識別爲一個mce設備了,但是無法匹配獲得usb_device_id。看匹配算法,發現mce設備要通過查表獲取。kernel/drivers/media/rc/mceusb.c中mceusb_dev_table的匹配表沒有該設備的廠商號。添加即可:

static struct usb_device_id mceusb_dev_table[] = {
         ......
        /* Formosa Industrial Computing / Beanbag Emulation Device */
        { USB_DEVICE(VENDOR_FORMOSA, 0xe018) },
       { USB_DEVICE(VENDOR_FORMOSA, 0xe042) },
        /* Formosa21 / eHome Infrared Receiver */
        { USB_DEVICE(VENDOR_FORMOSA, 0xe03a) },
        /* Formosa Industrial Computing AIM IR605/A */
        ... ...
}

通過以上作業, mce相關設備就已經添加好了,可以在apk中操作。

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章