http://www.wkb.idv.tw/moodle/mod/page/view.php?id=978&lang=zh_tw
2015年8月26日 星期三
[轉] 在Windows 7 64位系統下 右鍵開啟UltraEdit
開始→【regedit】
找到【HKEY_CLASSES_ROOT\*\shell】
新增機碼【edit with ultraedit32】
再新增機碼【command】
預設值數值資料填寫路徑加【 %1】
EX:C:\XXX)\UltraEdit-32\Uedit32.exe %1
找到【HKEY_CLASSES_ROOT\*\shell】
新增機碼【edit with ultraedit32】
再新增機碼【command】
預設值數值資料填寫路徑加【 %1】
EX:C:\XXX)\UltraEdit-32\Uedit32.exe %1
2015年8月17日 星期一
[轉] [Android]getevent,sendevent,input命令的使用
http://myeyeofjava.iteye.com/blog/1999615
adb shell 進入avd或者真機後台:
getevent
getevent -r -q 監控設備的sendevent事件
顯示格式說明
/*
* Event types
*/
二. 具體應用, 比如需要查看audio jack的事件,也就是耳機的插入
1. 首先確認耳機插入的事件是啥
r
2. 輸出 audio jack事件
用的event type是#define EV_SW 0x05
三、具體應用, 比如需要查看touch的事件
1、確認touch事件路徑
root@android:/ # getevent -i
add device 13: /dev/input/event7
bus: 0000
vendor 0000
product 0000
version 0000
name: "cyttsp4_mt"
location: "cyttsp4_mt.main_ttsp_core"
id: ""
version: 1.0.1
events:
ABS (0003): 0000 : value 0, min 0, max 0, fuzz 0, flat 0, resolution 0
2、touch 事件
用的event type是#define EV_ABS 0x03
只分析多touch事件
#define ABS_MT_SLOT 0x2f /* MT slot being modified */
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */
root@android:/ # getevent /dev/input/event7
單點觸摸
0003 0039 000000d5 //觸點區分的唯一ID
0003 0035 00000165 //觸點的x坐標
0003 0036 000002fa //觸點的y坐標
0003 003a 00000025 //觸點的壓力,實際上是接觸區域大小
0000 0000 00000000 //結束
多點觸摸
0003 0039 000000de
0003 0035 00000140
0003 0036 0000047f
0003 003a 00000021
0000 0000 00000000
0003 0035 0000013f
0003 003a 00000027
0003 002f 00000001 //切換上報其中一點
0003 0039 000000df
0003 0035 000001fd
0003 0036 000001e3
0003 003a 00000022
0000 0000 00000000
0003 002f 00000000 //切換上報其中一點
0003 0036 0000047e
0003 003a 0000002b
0000 0000 00000000
0003 0036 0000047d
0003 003a 0000002f
0000 0000 00000000
0003 0036 0000047b
0003 003a 00000034
0003 002f 00000001 //切換上報其中一點
0003 0035 000001fc
0003 0036 000001e6
0003 003a 00000023
0000 0000 00000000
三、getevent 源代碼分析
@system/core/toolbox/getevent.c
int getevent_main(int argc, char *argv[])
{
const char *device_path = "/dev/input"; //讀取的路徑
....
res = scan_dir(device_path, print_flags); //掃瞄路徑下的所有文件路徑
....
while(1) {
...
res = read(ufds[i].fd, &event, sizeof(event)); //讀取事件
...
print_event(event.type, event.code, event.value, print_flags); //打印出事件信息
}
}
四、sendevent源代碼分析
@system/core/toolbox/sendevent.c
sendevent
1. 模擬插入耳機, 這時候可以啟動收音機了(不再有耳機沒有的提示框)
sendevent /dev/input/event10 0005 0002 00000001
sendevent /dev/input/event10 0000 0000 00000000
input 根據avd和真機的不同,參數可能不同
$ input
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
4.可能遇到的問題
實際實現的時候,還可能遇到問題
一是root,getevent和sendevent需要/dev/input/event*的權限。一般應用是沒有這個權限的,需要在程序裡面獲取su後,執行chmod 666 /dev/input/event*。
二是設備名稱。因為你不知道觸摸屏或者按鍵到底對應的event*是多少。需要有一個初始化的過程,大致思路是往event0-event9分別寫入按鍵和觸摸信號,同時監聽activity裡的onkeydown和view的onclick,這樣來偵測設備。
三是廠商的實現不一樣,這個沒辦法,只能一個一個適配了,一般來說都還是標準的,有些廠商會有單獨的實現。
參考
http://lxr.free-electrons.com/source/include/uapi/linux/input.h#L803
http://source.android.com/tech/input/touch-devices.html
http://cjix.info/blog/misc/internal-input-event-handling-in-the-linux-kernel-and-the-android-userspace/
推薦參考網址:http://www.jtben.com/document/919575
adb shell 進入avd或者真機後台:
getevent
getevent -r -q 監控設備的sendevent事件
- root@android:/ # getevent -h
- Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
- -t: show time stamps
- -n: don't print newlines
- -s: print switch states for given bits
- -S: print all switch states
- -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
- -d: show HID descriptor, if available
- -p: show possible events (errs, dev, name, pos. events)
- -i: show all device info and possible events
- -l: label event types and names in plain text
- -q: quiet (clear verbosity mask)
- -c: print given number of events then exit
- -r: print rate events are received
顯示格式說明
- root@android:/ # getevent
- /dev/input/event5: 0005 0002 00000001
- device的名字:事件類型 鍵碼類別 具體的數值
- /dev/input/event5: 0000 0000 00000000
- 表示一次輸入結束
/*
* Event types
*/
- #define EV_SYN 0x00
- #define EV_KEY 0x01
- #define EV_REL 0x02
- #define EV_ABS 0x03
- #define EV_MSC 0x04
- #define EV_SW 0x05
- #define EV_LED 0x11
- #define EV_SND 0x12
- #define EV_REP 0x14
- #define EV_FF 0x15
- #define EV_PWR 0x16
- #define EV_FF_STATUS 0x17
- #define EV_MAX 0x1f
- #define EV_CNT (EV_MAX+1)
二. 具體應用, 比如需要查看audio jack的事件,也就是耳機的插入
1. 首先確認耳機插入的事件是啥
r
- oot@android:/ # getevent -i
- add device 1: /dev/input/event2
- bus: 0000
- vendor 0000
- product 0000
- version 0000
- name: "pmic8xxx_pwrkey"
- location: "pmic8xxx_pwrkey/input0"
- id: ""
- version: 1.0.1
- events:
- KEY (0001): 0074
- input props:
- <none>
- .....
- add device 5: /dev/input/event10
- bus: 0000
- vendor 0000
- product 0000
- version 0000
- name: "msm8960-snd-card Headset Jack"
- location: "ALSA"
- id: ""
- version: 1.0.1
- events:
- SW (0005): 0002* 0004* 0006 000e 000f 0010
- input props:
- <none>
- add device 6: /dev/input/event9
- bus: 0000
- vendor 0000
- product 0000
- version 0000
- name: "msm8960-snd-card Button Jack"
- location: "ALSA"
- id: ""
- version: 1.0.1
- events:
- KEY (0001): 0100 0101 0102 0103 0104 0105 0106 0107
- input props:
- <none>
2. 輸出 audio jack事件
用的event type是#define EV_SW 0x05
- /*
- * Switch events
- */
- #define SW_LID 0x00 /* set = lid shut */
- #define SW_TABLET_MODE 0x01 /* set = tablet mode */
- #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
- #define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any"
- set = radio enabled */
- #define SW_RADIO SW_RFKILL_ALL /* deprecated */
- #define SW_MICROPHONE_INSERT 0x04 /* set = inserted */
- #define SW_DOCK 0x05 /* set = plugged into dock */
- #define SW_LINEOUT_INSERT 0x06 /* set = inserted */
- #define SW_JACK_PHYSICAL_INSERT 0x07 /* set = mechanical switch set */
- #define SW_VIDEOOUT_INSERT 0x08 /* set = inserted */
- #define SW_CAMERA_LENS_COVER 0x09 /* set = lens covered */
- #define SW_KEYPAD_SLIDE 0x0a /* set = keypad slide out */
- #define SW_FRONT_PROXIMITY 0x0b /* set = front proximity sensor active */
- #define SW_ROTATE_LOCK 0x0c /* set = rotate locked/disabled */
- #define SW_LINEIN_INSERT 0x0d /* set = inserted */
- #define SW_HPHL_OVERCURRENT 0x0e /* set = over current on left hph */
- #define SW_HPHR_OVERCURRENT 0x0f /* set = over current on right hph */
- #define SW_UNSUPPORT_INSERT 0x10 /* set = unsupported device inserted */
- #define SW_MAX 0x20
- #define SW_CNT (SW_MAX+1)
- root@android:/ # getevent /dev/input/event10
- 0005 0002 00000001 (0002 表示earphone)
- 0005 0004 00000001 (0004 表示microphone)
- 0000 0000 00000000
- 插入 拔出
- Headset 0005 0002 00000001
- 0005 0004 00000001
- 0000 0000 00000000 0005 0002 00000000
- 0005 0004 00000000
- 0000 0000 00000000
- Headphone 0005 0002 00000001
- 0000 0000 00000000 0005 0002 00000000
- 0000 0000 00000000
- invalid 0005 0010 00000001
- 0000 0000 00000000 0005 0010 00000000
- 0000 0000 00000000
三、具體應用, 比如需要查看touch的事件
1、確認touch事件路徑
root@android:/ # getevent -i
add device 13: /dev/input/event7
bus: 0000
vendor 0000
product 0000
version 0000
name: "cyttsp4_mt"
location: "cyttsp4_mt.main_ttsp_core"
id: ""
version: 1.0.1
events:
ABS (0003): 0000 : value 0, min 0, max 0, fuzz 0, flat 0, resolution 0
2、touch 事件
用的event type是#define EV_ABS 0x03
只分析多touch事件
#define ABS_MT_SLOT 0x2f /* MT slot being modified */
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */
root@android:/ # getevent /dev/input/event7
單點觸摸
0003 0039 000000d5 //觸點區分的唯一ID
0003 0035 00000165 //觸點的x坐標
0003 0036 000002fa //觸點的y坐標
0003 003a 00000025 //觸點的壓力,實際上是接觸區域大小
0000 0000 00000000 //結束
多點觸摸
0003 0039 000000de
0003 0035 00000140
0003 0036 0000047f
0003 003a 00000021
0000 0000 00000000
0003 0035 0000013f
0003 003a 00000027
0003 002f 00000001 //切換上報其中一點
0003 0039 000000df
0003 0035 000001fd
0003 0036 000001e3
0003 003a 00000022
0000 0000 00000000
0003 002f 00000000 //切換上報其中一點
0003 0036 0000047e
0003 003a 0000002b
0000 0000 00000000
0003 0036 0000047d
0003 003a 0000002f
0000 0000 00000000
0003 0036 0000047b
0003 003a 00000034
0003 002f 00000001 //切換上報其中一點
0003 0035 000001fc
0003 0036 000001e6
0003 003a 00000023
0000 0000 00000000
三、getevent 源代碼分析
@system/core/toolbox/getevent.c
int getevent_main(int argc, char *argv[])
{
const char *device_path = "/dev/input"; //讀取的路徑
....
res = scan_dir(device_path, print_flags); //掃瞄路徑下的所有文件路徑
....
while(1) {
...
res = read(ufds[i].fd, &event, sizeof(event)); //讀取事件
...
print_event(event.type, event.code, event.value, print_flags); //打印出事件信息
}
}
四、sendevent源代碼分析
@system/core/toolbox/sendevent.c
sendevent
1. 模擬插入耳機, 這時候可以啟動收音機了(不再有耳機沒有的提示框)
sendevent /dev/input/event10 0005 0002 00000001
sendevent /dev/input/event10 0000 0000 00000000
input 根據avd和真機的不同,參數可能不同
$ input
usage: input [text|keyevent]
input text <string>
input keyevent <event_code>
4.可能遇到的問題
實際實現的時候,還可能遇到問題
一是root,getevent和sendevent需要/dev/input/event*的權限。一般應用是沒有這個權限的,需要在程序裡面獲取su後,執行chmod 666 /dev/input/event*。
二是設備名稱。因為你不知道觸摸屏或者按鍵到底對應的event*是多少。需要有一個初始化的過程,大致思路是往event0-event9分別寫入按鍵和觸摸信號,同時監聽activity裡的onkeydown和view的onclick,這樣來偵測設備。
三是廠商的實現不一樣,這個沒辦法,只能一個一個適配了,一般來說都還是標準的,有些廠商會有單獨的實現。
參考
http://lxr.free-electrons.com/source/include/uapi/linux/input.h#L803
http://source.android.com/tech/input/touch-devices.html
http://cjix.info/blog/misc/internal-input-event-handling-in-the-linux-kernel-and-the-android-userspace/
推薦參考網址:http://www.jtben.com/document/919575
訂閱:
文章 (Atom)