A20+Android EETI電阻屏調試記錄

硬件平臺:sen_A20

系統版本:Android 4.2.2

內核版本:linux3.3

固件版本:v1.2

電阻屏:17寸 EETI eGTouch (USB)


一、配置內核

(1)配置.config

1. CONFIG_INPUT_EVDEV
2. CONFIG_INPUT_UINPUT
3. CONFIG_HIDRAW ( for USB Interface )

可以使用make menuconfig ARCH=arm命令選中:

 < * > Event interface

 < * > User level driver suport

--HID Devices

 < * > /dev/hidraw raw HID device support

(2)檢查是否被選中

CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_UINPUT=y
CONFIG_HIDRAW=y


二、修改驅動代碼:

1、

1. /SourceCode/drivers/input/evdev.c 添加

static bool evdev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid EETI USB touchscreens */
#define VID_EETI 0x0EEF
if ((BUS_USB == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
return true;
}

static struct input_handler evdev_handler = {
.event = evdev_event,
.match = evdev_match, /* Added by EETI*/
.connect = evdev_connect,
.disconnect = evdev_disconnect,
.fops = &evdev_fops,
.minor = EVDEV_MINOR_BASE,
.name = "evdev",
.id_table = evdev_ids,
};

2. /SourceCode/drivers/input/mousedev.c

static bool mousedev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid EETI USB touchscreens */
#define VID_EETI 0x0EEF
if ((BUS_USB == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
/* Avoid EETI virtual devices */
if ((BUS_VIRTUAL == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;
return true;
}

static struct input_handler mousedev_handler = {
.event = mousedev_event,
.match = mousedev_match, /* Added by EETI */

.connect = mousedev_connect,
.disconnect = ousedev_disconnect,
.fops = &mousedev_fops,
.minor = MOUSEDEV_MINOR_BASE,
.name = "mousedev",
.id_table = mousedev_ids,
}

3. /SourceCode/drivers/input/joydev.c

static bool joydev_match(struct input_handler *handler, struct input_dev *dev)
{
/* Avoid touchpads and touchscreens */
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_TOUCH, dev->keybit))
return false;
/* Avoid tablets, digitisers and similar devices */
if (test_bit(EV_KEY, dev->evbit) && test_bit(BTN_DIGI, dev->keybit))
return false;
/* Avoid EETI virtual devices */
#define VID_EETI 0x0EEF
if (( BUS_VIRTUAL == dev->id.bustype) && (VID_EETI == dev->id.vendor))
return false;

return true;
}
static struct input_handler joydev_handler = {
.event = joydev_event,
.match = joydev_match,
.connect = joydev_connect,
.disconnect = joydev_disconnect,
.fops = &joydev_fops,
.minor = JOYDEV_MINOR_BASE,
.name = "joydev",
.id_table = joydev_ids,
};

三、編譯內核、系統,將固件燒寫到板子上(用串口工具查看)

1、在終端輸入“cat /proc/bus/input/devices“


2、將廠商攜帶的文件放到android目錄下:

廠家提供有四個文件:

a) eGTouchD:  a daemon service driver for EETI touch controller.
b) eGTouchA.ini :  a parameter list could be loaded by driver
c) eGalaxTouch_VirtualDevice.idc:  a file necessary for Android 3.0 upwards
d) eGalaxCalibrator:  a tool provides calibration and line drawing.

(1)將eGTouchD放到 system/bin目錄下,並修改init.rc文件

添加:    service eGTouchD /system/bin/eGTouchD
user root
group root
oneshot

(2)將 eGalaxTouch_VirtualDevice.idc放到system/usr/idc目錄下 

(3)將 eGTouchA.ini文件放到/data目錄下:

*爲了方便,我們可以將這三個文件放在device\softwinner\sugar-ref001目錄下:通過配置sugar-ref001.mk將文件移動到相對於的位置。編譯燒寫即可


這裏要詳細說明下:在文件系統啓動的時候eGTouchD這個文件會檢測data目錄下是否有這個文件,如果沒有就自動創建,而系統自動創建的這個文件跟自己配的有所差異

,這是廠商的一個BUG,我們可以在文件系統加載的時候,同時也啓動這個文件,不讓他自動生成。

首先,在device\softwinner\sugar-ref001\sugar-ref001.mk添加:

PRODUCT_COPY_FILES += \
device/softwinner/sugar-ref001/eGTouchD:system/bin/eGTouchD \
device/softwinner/sugar-ref001/eGalaxTouch_VirtualDevice.idc:system/usr/idc/eGalaxTouch_VirtualDevice.idc \
device/softwinner/sugar-ref001/eGTouchA.ini:data/eGTouchA.ini \

這樣就eGTouchA.ini就會打包在userdate.img裏面。但是有時我們不想將userdate.img掛載上去,比如:我1G的內存,如果掛載上去,系統只能識別到可用只有128M,顯然是不理想的。如果你生硬不掛載userdate.img上去,那麼系統會自動創建eGTouchA.ini,這樣會造成在觸摸的過程中會出現死機的現象。那麼我們可以修改:

將device/softwinner/sugar-ref001/eGTouchA.ini:data/eGTouchA.ini   修改爲  /device/softwinner/sugar-ref001/eGTouchA.ini:system/eGTouchA.ini \

將他移動到system目錄下,然後我們在android/out/…/suger-ref001/root目錄下 的int.rc文件裏添加

copy /system/eGTouchA.ini /data/eGTouchA.ini
chmod 0777 /data/eGTouchA.ini

注意要添加權限:

然後打包成固件燒寫,收工。


這個觸摸屏調試了總共花了將近一週的時間,一開始不知道有eGTouchA.ini這個文件有BUG,在測試的時候用adb pull出來才發現兩個文件並不一樣(詳細配置看說明,這裏不介紹),之後問了廠商才得知系統會自動創建。

    記錄一下,以備忘記,如果哪裏有不對,請指出!謝謝

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