Surface DuoはいちおうSurfaceと言ってるだけあって、Surface Pen(Slim Pen含む)に対応してます。サイドボタンなどなども一応ちゃんと動くそうです。
さて、このペンがAndroidにどう認識されているのかとても気になるので確認してみます。
$ getevent -p
add device 1: /dev/input/event6
name: "sm8150-tavil-snd-card Button Jack"
events:
KEY (0001): 0072 0073 00e2 0104 0105 0246
input props:
<none>
add device 2: /dev/input/event5
name: "sm8150-tavil-snd-card Headset Jack"
events:
SW (0005): 0002 0004 0006 0007 0010 0011 0012 0013
input props:
<none>
add device 3: /dev/input/event4
name: "surface_touchscreen"
events:
KEY (0001): 0141 014b
ABS (0003): 002f : value 0, min 0, max 11, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 21067, fuzz 0, flat 0, resolution 0
0031 : value 0, min 0, max 21067, fuzz 0, flat 0, resolution 0
0034 : value 0, min -90, max 90, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 17709, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 11411, fuzz 0, flat 0, resolution 0
0037 : value 0, min 0, max 15, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
003a : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
input props:
INPUT_PROP_DIRECT
add device 4: /dev/input/event3
name: "surface_tail_button"
events:
KEY (0001): 007d 00bc 00bd 00be
input props:
<none>
add device 5: /dev/input/event1
name: "da7280-haptic"
events:
FF (0015): 0050 0051 0052 005d 0060
input props:
<none>
add device 6: /dev/input/event0
name: "qpnp_pon"
events:
KEY (0001): 0072 0074
input props:
<none>
add device 7: /dev/input/event2
name: "gpio-keys"
events:
KEY (0001): 0073
input props:
<none>
"surface_tail_button" なんて気になる名前があります。とりあえずペンで画面をタップします。
/dev/input/event4: 0003 002f 0000000a
/dev/input/event4: 0003 0039 0000ffff
/dev/input/event4: 0003 0035 00002c7f
/dev/input/event4: 0003 0036 000018ae
/dev/input/event4: 0000 0000 00000000
/dev/input/event4: 0003 0035 00002c82
ペンは /dev/input/event4
なので、 "surface_touchscreen" で処理されていました。ペンの両端とも反応します。後のボタンは反応しません。
後ろボタンの行方
ペンの後ろのボタンは"surface_tail_button" で来ると思った…けれどもどうやら違うようです。ペンの後ろボタンは実はBluetooth接続されています。あのボタンだけ。
ペンを接続するために、後ろのボタンを5秒間長押しします。すると、ペンが接続されて新しいデバイスが出現します。
add device 1: /dev/input/event7
name: "Surface Slim Pen"
events:
KEY (0001): 0001 0002 0003 0004 0005 0006 0007 0008
0009 000a 000b 000c 000d 000e 000f 0010
0011 0012 0013 0014 0015 0016 0017 0018
0019 001a 001b 001c 001d 001e 001f 0020
0021 0022 0023 0024 0025 0026 0027 0028
0029 002a 002b 002c 002d 002e 002f 0030
0031 0032 0033 0034 0035 0036 0037 0038
0039 003a 003b 003c 003d 003e 003f 0040
0041 0042 0043 0044 0045 0046 0047 0048
0049 004a 004b 004c 004d 004e 004f 0050
0051 0052 0053 0056 0057 0058 0060 0061
0062 0063 0064 0066 0067 0068 0069 006a
006b 006c 006d 006e 006f 0074 0075 0077
007d 007e 007f 00b7 00b8 00b9 00ba 00bb
00bc 00bd 00be
ABS (0003): 0028 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0029 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002a : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002b : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002c : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002d : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002e : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
002f : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0030 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0031 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0032 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0033 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0034 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0037 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0038 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
0039 : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003a : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003b : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003c : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003d : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003e : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
003f : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
MSC (0004): 0004
input props:
<none>
これが後ろのペンに反応する入力デバイスだそうです。これはキーボードに見えていて、ボタンを押すとキーコードを出力します。
しかも、ACTION_UPだけきます。
…と、ここまではつながってさえいればアプリに新機能組み込んだりいろいろできそうだね!で終わるのですがちゃんとオチを用意しました。
このボタン、30秒無操作でBluetoothが切断します。30秒以内にボタンを押せば一応延長されます。でも無操作30秒で切断されます。再接続は5秒長押しです。というわけであんまり役に立ちません…
ところで
"surface_tail_button" は何だったんだろう…古いSurface Penだとあそこが反応する…?いやそんなまさかね…