1 of 31

User space driver in Android Things

Devfest Kyoto 2018

#devfest18

2 of 31

自己紹介

Takuya Kubota�@kubotaku1119

  • GDG京都 Co-organizer
  • mui Lab, Inc. �Software Architect�

#devfest18

3 of 31

User space driver

in Android Things

#devfest18

4 of 31

Extends the core Android framework with additional APIs

Android Things Framework

#devfest18

5 of 31

Google Play Services

#devfest18

6 of 31

Management console

Manage and push OTA update package

Available update management APIs.

#devfest18

7 of 31

https://developer.android.com/things/hardware/

#devfest18

8 of 31

User space driver

#devfest18

9 of 31

Out of sight until needed�Out of mind until utilized�https://mui.jp

#devfest18

10 of 31

Out of sight until needed�Out of mind until utilized�https://mui.jp

#devfest18

11 of 31

#devfest18

12 of 31

#devfest18

13 of 31

Hardware Component

#devfest18

14 of 31

Hardware Component

Android Things

#devfest18

15 of 31

Hardware Component

Android Things

Peripheral I/O APIs

#devfest18

16 of 31

Hardware Component

#devfest18

17 of 31

Hardware Component

Original Listener

#devfest18

18 of 31

Hardware Component

#devfest18

19 of 31

Hardware Component

Original Listener

#devfest18

20 of 31

Touch Eventは通常、

システムからViewに通知される

#devfest18

21 of 31

Listenerのせいで

Viewが活用できなぁああい!!!

※某ハリウッド俳優のテンションで読んでください

#devfest18

22 of 31

そこで

User space driverを使う

#devfest18

23 of 31

User space driver

#devfest18

24 of 31

User space driver

  • 他のアプリやデバイスで利用する際の移植性�
  • 既存コードの再利用性公開されているドライバー
  • GestureDetectorやLocation API等との統合性

#devfest18

25 of 31

Hardware Component

#devfest18

26 of 31

private void initialize() {

// Input Driver生成と登録� mDriver = InputDriver.builder()� .setName(DRIVER_NAME)� .setAxisConfiguration(MotionEvent.AXIS_X, 0, 255, 0, 0)� .setAxisConfiguration(MotionEvent.AXIS_Y, 0, 255, 0, 0)� .build();�� UserDriverManager manager = UserDriverManager.getInstance();� manager.registerInputDriver(mDriver);

}

// A state change has occurred�private void triggerEvent(int x, int y, boolean pressed) {

// Eventを発行(MotionEventとして通知される)� InputDriverEvent event = new InputDriverEvent();� event.setPosition(MotionEvent.AXIS_X, x);� event.setPosition(MotionEvent.AXIS_Y, y);� event.setContact(pressed);�� mDriver.emit(event);�}

https://developer.android.com/things/sdk/drivers/input

#devfest18

27 of 31

デモ

#devfest18

28 of 31

まとめ

  • User driverで独自デバイスのイベントをシステムイベントに統合できる�
  • ただしinput deiverはTrackPadのような動作になってしまうので注意(現行の仕様)�
  • 自分でMotionEventをdispatchして回避する(バッドノウハウ)

#devfest18

29 of 31

Coming Soon!!!

#devfest18

30 of 31

Coming Soon!!!

#devfest18

31 of 31

Thank you

#devfest18