2021年1月

emuelec evtest the keypad

ark@rgb10:~$ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0: rk8xx_pwrkey
/dev/input/event1: rockchip,rk817-codec Headphones
/dev/input/event2: odroidgo2_joypad
Select the device event number [0-2]: 2
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x101
Input device name: "odroidgo2_joypad"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)

Event code 304 (BTN_SOUTH)
Event code 305 (BTN_EAST)
Event code 307 (BTN_NORTH)
Event code 308 (BTN_WEST)
Event code 310 (BTN_TL)
Event code 311 (BTN_TR)
Event code 312 (BTN_TL2)
Event code 313 (BTN_TR2)
Event code 544 (BTN_DPAD_UP)
Event code 545 (BTN_DPAD_DOWN)
Event code 546 (BTN_DPAD_LEFT)
Event code 547 (BTN_DPAD_RIGHT)
Event code 704 (BTN_TRIGGER_HAPPY1)
Event code 705 (BTN_TRIGGER_HAPPY2)
Event code 706 (BTN_TRIGGER_HAPPY3)
Event code 707 (BTN_TRIGGER_HAPPY4)
Event code 708 (BTN_TRIGGER_HAPPY5)
Event code 709 (BTN_TRIGGER_HAPPY6)

Event type 3 (EV_ABS)

Event code 0 (ABS_X)
  Value      0
  Min     -900
  Max      899
  Fuzz      32
  Flat      32
Event code 1 (ABS_Y)
  Value      0
  Min     -900
  Max      899
  Fuzz      32
  Flat      32

Properties:
Testing ... (interrupt to exit)
Event: time 1611323493.496528, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 1
Event: time 1611323493.496528, -------------- SYN_REPORT ------------
Event: time 1611323493.616278, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 0
Event: time 1611323493.616278, -------------- SYN_REPORT ------------
Event: time 1611323496.080396, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 1
Event: time 1611323496.080396, -------------- SYN_REPORT ------------
Event: time 1611323496.228346, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 0
Event: time 1611323496.228346, -------------- SYN_REPORT ------------
Event: time 1611323496.732352, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 1
Event: time 1611323496.732352, -------------- SYN_REPORT ------------
Event: time 1611323496.860450, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 0
Event: time 1611323496.860450, -------------- SYN_REPORT ------------
Event: time 1611323497.264413, type 1 (EV_KEY), code 547 (BTN_DPAD_RIGHT), value 1
Event: time 1611323497.264413, -------------- SYN_REPORT ------------
Event: time 1611323497.372320, type 1 (EV_KEY), code 547 (BTN_DPAD_RIGHT), value 0
Event: time 1611323497.372320, -------------- SYN_REPORT ------------
Event: time 1611323497.696433, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 1
Event: time 1611323497.696433, -------------- SYN_REPORT ------------
Event: time 1611323497.808297, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 0
Event: time 1611323497.808297, -------------- SYN_REPORT ------------
Event: time 1611323498.416461, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 1
Event: time 1611323498.416461, -------------- SYN_REPORT ------------
Event: time 1611323498.540424, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 0
Event: time 1611323498.540424, -------------- SYN_REPORT ------------
Event: time 1611323498.940350, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 1
Event: time 1611323498.940350, -------------- SYN_REPORT ------------
Event: time 1611323499.028463, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 0
Event: time 1611323499.028463, -------------- SYN_REPORT ------------
Event: time 1611323499.636405, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 1
Event: time 1611323499.636405, -------------- SYN_REPORT ------------
Event: time 1611323499.760405, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 0
Event: time 1611323499.760405, -------------- SYN_REPORT ------------
Event: time 1611323500.084310, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 1
Event: time 1611323500.084310, -------------- SYN_REPORT ------------
Event: time 1611323500.512354, type 1 (EV_KEY), code 545 (BTN_DPAD_DOWN), value 0
Event: time 1611323500.512354, -------------- SYN_REPORT ------------
Event: time 1611323500.724398, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 1
Event: time 1611323500.724398, -------------- SYN_REPORT ------------
Event: time 1611323501.132367, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 0
Event: time 1611323501.132367, -------------- SYN_REPORT ------------
Event: time 1611323501.388362, type 1 (EV_KEY), code 547 (BTN_DPAD_RIGHT), value 1
Event: time 1611323501.388362, -------------- SYN_REPORT ------------
Event: time 1611323501.732448, type 1 (EV_KEY), code 547 (BTN_DPAD_RIGHT), value 0
Event: time 1611323501.732448, -------------- SYN_REPORT ------------
Event: time 1611323502.112278, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 1
Event: time 1611323502.112278, -------------- SYN_REPORT ------------
Event: time 1611323502.376336, type 1 (EV_KEY), code 544 (BTN_DPAD_UP), value 0
Event: time 1611323502.376336, -------------- SYN_REPORT ------------
Event: time 1611323502.668349, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 1
Event: time 1611323502.668349, -------------- SYN_REPORT ------------
Event: time 1611323502.888432, type 1 (EV_KEY), code 546 (BTN_DPAD_LEFT), value 0
Event: time 1611323502.888432, -------------- SYN_REPORT ------------
Event: time 1611323503.160290, type 1 (EV_KEY), code 547 (BTN_DPAD_RIGHT), value 1
Event: time 1611323503.160290, -------------- SYN_REPORT ------------
Event: time 1611323503.328259, type 1 (EV_KEY), code 547 (BTN_DP

在 emuelec-autostart.service 里, 执行了/storage/.config/autostart.sh

在autostart.sh的结尾, 又执行了 /storage/.config/custom_start.sh

最后一步, 通过 emustation.service, 把/usr/bin/emulationstation启动起来

通过ScreenScraper自动下载游戏说明和截图
首先到 https://www.screenscraper.fr/ 注册一个帐号, 需要邮箱验证

在EmuELEC界面上, 通过 SCRAPE 菜单, 填充帐号和口令, 依次选择
Scrape From: SCREENSCRAPER
Image Source: SCREENSHOT(游戏运行画面), TITLE SCREENSHOT(游戏开始画面), MIX (游戏运行截图+游戏盒子合并在一起的一张图)
Box Source: NONE (游戏包装, 2d或3d, 因为色深为24bit, 文件size会比较大, 都是200~400K大小, 如果用列表展示, 就不需要下载这个)
Logo Source: WHEEL
Scrape Ratings: YES
Scrape Videos: NO
然后点击Scrape Now, 选择要下载的集合, 选择处理冲突的方式, 建议自动.

系统就会在后台自动下载, 因为来源在国外所以速度会比较慢.

修改时区
系统默认时区为墨西哥, 界面上没有修改时区的地方, 需要命令行登录后修改 /emuelec/configs/emuelec.conf , 里面有timezone配置. 改为

1
system.timezone=Asia/Shanghai
连发键的设置Autofire, Turbo Button, Duty Cycle
这个其实是RetroArch的配置, 和以往的连发键设置不太一样, RetroArch用的是开关触发的机制, 有三处相关的设置
Settings->Input->Turbo Period, 连发键开启时, 在连发当中每次按下的时间长度(多少帧)
Settings->Input->Duty Cycle, 连发键开启时, 在连发当中按下的时间占空比
Settings->Input->User/Port[1,2,3,4] Binds->User/Port[1,2,3,4] Turbo, 开启连发的键

使用方法是, 按住需要连发的按键后, 按一下开启连发的键, 这个按住的键就开启连发了. 这个开启连发的效果只在按住时有效, 松开按键后连发的效果就消失, 需要再来一遍.

输入设备按键测试
查看所有输入设备, 列出各设备对应的event编号

1
cat /proc/bus/input/devices
输入设备测试

1
2
3
4

手柄测试, 需要对应上面命令输出的js编号

jstest --event /dev/input/js0

通用的输入事件测试, 需要对应上面命令产生的event编号

evtest /dev/input/event3
对于乐视尚酷版手柄, 无法设置select键的问题: 这个手柄在输入设备里会产生两个设备, 分别是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
I: Bus=0003 Vendor=0101 Product=1d79 Version=0110
N: Name="MY-POWER LeWGP-201"
P: Phys=usb-xhci-hcd.0.auto-1.4/input0
S: Sysfs=/devices/c9000000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.4/1-1.4:1.0/0003:0101:1D79.0003/input/input4
U: Uniq=
H: Handlers=js0 event4
B: PROP=0
B: EV=1b
B: KEY=7fff0000 0 0 0 0 0 0 0 0 0
B: ABS=3063f
B: MSC=10

I: Bus=0003 Vendor=0101 Product=1d79 Version=0110
N: Name="MY-POWER LeWGP-201"
P: Phys=usb-xhci-hcd.0.auto-1.4/input1
S: Sysfs=/devices/c9000000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.4/1-1.4:1.1/0003:0101:1D79.0004/input/input5
U: Uniq=
H: Handlers=kbd event5
B: PROP=0
B: EV=1f
B: KEY=3007f 0 0 0 0 483ffff 17aff32d bf544446 0 0 1 120c13 b17c000 267bfa d941dfed 9e1680 4400 0 10000002
B: REL=40
B: ABS=1 0
B: MSC=10
其中js0:event4设备可以响应除了back键和底下一排三个键以外其他所有按键, 而kbd:event5设备则正好相反. 可以通过evremap将event5的按键映射到event4

1
2

Enable 'BACK' key on LeWGP-201 gamepad

evremap /dev/input/by-id/usb-MY-POWER_LeWGP-201-event-if01 /dev/input/by-id/usb-MY-POWER_LeWGP-201-event-joystick
将其添加到 /storage/.config/custom_start.sh 文件中, 将来开机就会自动生效.

另外对于乐视尚酷版手柄在连接后每隔几秒钟会断开一秒(断开时可以看到手柄上方4个灯一起闪, 连接好以后应该是只亮一个灯的)的问题, 这个通过dmesg看并无硬件通断事件, 如果连接头连接在usbhub上就容易有这个问题, 在R3300L上, 通过otg口连接到盒子的microusb口, 就不会出现断开的问题了. 推断是因为乐视这个接收头对电压的要求较高, usbhub的电压不足以使其稳定工作所致.