├── .gitignore
├── AndroidManifest.xml
├── CHANGELOG.md
├── LICENSE
├── LICENSE.GPL
├── README.md
├── assets
└── keymaps
│ ├── de_DE
│ ├── en_US
│ └── template
├── build.xml
├── doc
├── RESOURCES
└── hiddescriptors
│ ├── AppleWirelessKeyboard
│ ├── AppleWirelessMouse
│ ├── BarcodeScanner
│ ├── LogitechM500Mouse
│ ├── LogitechPS3Keyboard
│ ├── MicrosoftMouse
│ ├── RazerCopperheadMouse
│ └── SonyBDRemote
├── drawablesrc
├── app_icon.svg
├── btn_android_back.svg
├── btn_android_home.svg
├── btn_android_menu.svg
├── btn_ps3_circle.svg
├── btn_ps3_ps.svg
├── btn_ps3_select.svg
├── btn_ps3_square.svg
├── btn_ps3_start.svg
├── btn_ps3_triangle.svg
├── btn_ps3_x.svg
├── disconnected.svg
├── menu_paste.svg
├── problem.svg
├── scroll.svg
├── search_bt_device.svg
└── tutorial_touch_arrow.svg
├── jni
├── Android.mk
├── bluectrld.c
├── bluectrld.h
├── error.c
├── error.h
├── hiddescriptor.h
├── hidhci.c
├── hidhci.h
├── hidipc.c
├── hidipc.h
├── hidl2cap.c
├── hidl2cap.h
├── hidsdp.c
├── hidsdp.h
├── log.c
└── log.h
├── local.properties.example
├── project.properties
├── res
├── anim
│ ├── slide_in_left.xml
│ ├── slide_in_right.xml
│ ├── slide_out_left.xml
│ └── slide_out_right.xml
├── drawable-hdpi
│ ├── ab_btn_add.png
│ ├── ab_btn_keyboard.png
│ ├── ab_btn_next_disabled.png
│ ├── ab_btn_next_normal.png
│ ├── ab_btn_previous_disabled.png
│ ├── ab_btn_previous_normal.png
│ ├── ab_transparent_dark_holo.9.png
│ ├── app_icon.png
│ ├── app_icon_small.png
│ ├── bottom_bar_dark_holo.9.png
│ ├── btn_android_back.png
│ ├── btn_android_home.png
│ ├── btn_android_menu.png
│ ├── btn_ps3_circle.png
│ ├── btn_ps3_ps.png
│ ├── btn_ps3_select.png
│ ├── btn_ps3_square.png
│ ├── btn_ps3_start.png
│ ├── btn_ps3_triangle.png
│ ├── btn_ps3_x.png
│ ├── disconnected.png
│ ├── ic_ab_back_holo_dark.png
│ ├── ic_action_send.png
│ ├── list_focused_holo.9.png
│ ├── list_pressed_holo_dark.9.png
│ ├── menu_about.png
│ ├── menu_compose.png
│ ├── menu_help.png
│ ├── menu_paste.png
│ ├── menu_preferences.png
│ ├── problem.png
│ ├── scroll_base.png
│ ├── scroll_horizontal_active.png
│ ├── scroll_vertical_active.png
│ ├── search_bt_device.png
│ ├── textfield_activated_holo_dark.9.png
│ ├── textfield_default_holo_dark.9.png
│ ├── textfield_disabled_focused_holo_dark.9.png
│ ├── textfield_disabled_holo_dark.9.png
│ ├── tutorial_touch_arrow_down.png
│ ├── tutorial_touch_arrow_down_left.png
│ ├── tutorial_touch_arrow_left.png
│ ├── tutorial_touch_arrow_right.png
│ ├── tutorial_touch_arrow_up.png
│ └── tutorial_touch_arrow_up_right.png
├── drawable-mdpi
│ ├── ab_btn_add.png
│ ├── ab_btn_keyboard.png
│ ├── ab_btn_next_disabled.png
│ ├── ab_btn_next_normal.png
│ ├── ab_btn_previous_disabled.png
│ ├── ab_btn_previous_normal.png
│ ├── ab_transparent_dark_holo.9.png
│ ├── app_icon.png
│ ├── app_icon_small.png
│ ├── bottom_bar_dark_holo.9.png
│ ├── btn_android_back.png
│ ├── btn_android_home.png
│ ├── btn_android_menu.png
│ ├── btn_ps3_circle.png
│ ├── btn_ps3_ps.png
│ ├── btn_ps3_select.png
│ ├── btn_ps3_square.png
│ ├── btn_ps3_start.png
│ ├── btn_ps3_triangle.png
│ ├── btn_ps3_x.png
│ ├── disconnected.png
│ ├── ic_ab_back_holo_dark.png
│ ├── ic_action_send.png
│ ├── list_focused_holo.9.png
│ ├── list_pressed_holo_dark.9.png
│ ├── menu_about.png
│ ├── menu_compose.png
│ ├── menu_help.png
│ ├── menu_paste.png
│ ├── menu_preferences.png
│ ├── problem.png
│ ├── scroll_base.png
│ ├── scroll_horizontal_active.png
│ ├── scroll_vertical_active.png
│ ├── search_bt_device.png
│ ├── textfield_activated_holo_dark.9.png
│ ├── textfield_default_holo_dark.9.png
│ ├── textfield_disabled_focused_holo_dark.9.png
│ ├── textfield_disabled_holo_dark.9.png
│ ├── tutorial_touch_arrow_down.png
│ ├── tutorial_touch_arrow_down_left.png
│ ├── tutorial_touch_arrow_left.png
│ ├── tutorial_touch_arrow_right.png
│ ├── tutorial_touch_arrow_up.png
│ └── tutorial_touch_arrow_up_right.png
├── drawable-nodpi
│ └── touchpad_background.png
├── drawable-xhdpi
│ ├── ab_btn_add.png
│ ├── ab_btn_keyboard.png
│ ├── ab_btn_next_disabled.png
│ ├── ab_btn_next_normal.png
│ ├── ab_btn_previous_disabled.png
│ ├── ab_btn_previous_normal.png
│ ├── ab_transparent_dark_holo.9.png
│ ├── app_icon.png
│ ├── app_icon_small.png
│ ├── bottom_bar_dark_holo.9.png
│ ├── btn_android_back.png
│ ├── btn_android_home.png
│ ├── btn_android_menu.png
│ ├── btn_ps3_circle.png
│ ├── btn_ps3_ps.png
│ ├── btn_ps3_select.png
│ ├── btn_ps3_square.png
│ ├── btn_ps3_start.png
│ ├── btn_ps3_triangle.png
│ ├── btn_ps3_x.png
│ ├── disconnected.png
│ ├── ic_ab_back_holo_dark.png
│ ├── ic_action_send.png
│ ├── list_focused_holo.9.png
│ ├── list_pressed_holo_dark.9.png
│ ├── menu_paste.png
│ ├── problem.png
│ ├── scroll_base.png
│ ├── scroll_horizontal_active.png
│ ├── scroll_vertical_active.png
│ ├── search_bt_device.png
│ ├── textfield_activated_holo_dark.9.png
│ ├── textfield_default_holo_dark.9.png
│ ├── textfield_disabled_focused_holo_dark.9.png
│ ├── textfield_disabled_holo_dark.9.png
│ ├── tutorial_touch_arrow_down.png
│ ├── tutorial_touch_arrow_down_left.png
│ ├── tutorial_touch_arrow_left.png
│ ├── tutorial_touch_arrow_right.png
│ ├── tutorial_touch_arrow_up.png
│ └── tutorial_touch_arrow_up_right.png
├── drawable
│ ├── ab_btn_next.xml
│ ├── ab_btn_previous.xml
│ ├── ab_button.xml
│ ├── action_bar_home.xml
│ ├── btn_touchpad.xml
│ ├── btn_touchpad_pressed.xml
│ ├── edit_text_holo_dark.xml
│ ├── icon_btn_touchpad.xml
│ ├── icon_btn_touchpad_pressed.xml
│ ├── scroll_all.xml
│ ├── scroll_horizontal.xml
│ ├── scroll_vertical.xml
│ ├── tutorial_1f_scroll.xml
│ ├── tutorial_1f_tap.xml
│ ├── tutorial_2f_scroll.xml
│ ├── tutorial_2f_tap.xml
│ ├── tutorial_3f_d.xml
│ ├── tutorial_3f_l.xml
│ ├── tutorial_3f_lr.xml
│ ├── tutorial_3f_tap.xml
│ ├── tutorial_3f_u.xml
│ ├── tutorial_4f_d.xml
│ ├── tutorial_4f_lr.xml
│ ├── tutorial_4f_u.xml
│ ├── tutorial_4f_ud.xml
│ ├── tutorial_drag.xml
│ ├── tutorial_edge_b.xml
│ ├── tutorial_edge_l.xml
│ ├── tutorial_edge_r.xml
│ ├── tutorial_edge_t.xml
│ ├── tutorial_pinch_zoom.xml
│ ├── tutorial_tap.xml
│ ├── tutorial_tap_inner_circle.xml
│ ├── tutorial_tap_outer_circle.xml
│ ├── tutorial_touch_move.xml
│ └── tutorial_touch_point.xml
├── layout
│ ├── about_dialog.xml
│ ├── changelog_dialog.xml
│ ├── device_list.xml
│ ├── pairing.xml
│ ├── touchpad.xml
│ └── touchpad_tutorial.xml
├── menu
│ ├── device_context.xml
│ ├── main.xml
│ └── touchpad.xml
├── values-land
│ ├── style.xml
│ └── style_touchpad.xml
├── values-port
│ ├── style_touchpad.xml
│ └── style_tutorial.xml
├── values-w600dp-h600dp
│ ├── style.xml
│ └── style_tutorial.xml
├── values
│ ├── colors.xml
│ ├── keymaps.xml
│ ├── operating_systems.xml
│ ├── pref_touchpad_buttons.xml
│ ├── pref_touchpad_gesture_mode.xml
│ ├── strings.xml
│ ├── style.xml
│ ├── style_about.xml
│ ├── style_changelog.xml
│ ├── style_help.xml
│ ├── style_pairing.xml
│ ├── style_touchpad.xml
│ └── style_tutorial.xml
└── xml
│ └── preferences_device.xml
└── src
└── org
└── ronsdev
└── bluectrl
├── ChangelogDialog.java
├── CharKeyReportMap.java
├── DeviceManager.java
├── DevicePreferenceActivity.java
├── DeviceSettings.java
├── HidKeyboard.java
├── HidMouse.java
├── IntArrayList.java
├── KeyEventFuture.java
├── MainActivity.java
├── OnMouseButtonClickListener.java
├── PairedDevice.java
├── PairingActivity.java
├── TouchpadActivity.java
├── TouchpadTutorialActivity.java
├── daemon
├── DaemonActivity.java
├── DaemonCallbackReceiver.java
├── DaemonListActivity.java
└── DaemonService.java
└── widget
├── ComposeTextLayout.java
├── FloatSliderPreference.java
├── KeyboardInputView.java
├── MouseTouchListener.java
├── OnKeyboardComposingTextListener.java
├── OnScrollModeChangedListener.java
├── OnSendComposeTextListener.java
├── OnTouchpadGestureListener.java
├── SummaryListPreference.java
├── TouchpadView.java
└── TouchpadViewGestureListener.java
/.gitignore:
--------------------------------------------------------------------------------
1 | assets/bluectrld
2 | assets/CHANGELOG.md
3 | bin/
4 | gen/
5 | libs/
6 | obj/
7 | ant.properties
8 | local.properties
9 | proguard.cfg
10 | .classpath
11 | .project
12 | .settings
13 |
--------------------------------------------------------------------------------
/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
12 |
13 |
15 |
16 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
35 |
36 |
40 |
41 |
44 |
45 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | Version 3.0
2 | -----------
3 | * New system specific touchpad gestures
4 | * New interactive touchpad tutorial
5 | * New menu item for composing text
6 | * Voice input can be corrected before sending
7 | * New "Scroll sensitivity" setting
8 | * New "Stay awake" setting
9 | * You can long press the keyboard button to change the input method
10 |
11 |
12 |
13 | Version 2.3
14 | -----------
15 | * Fixed a problem with the SwiftKey Keyboard
16 | * New pinch-to-zoom gesture
17 |
18 |
19 |
20 | Version 2.2
21 | -----------
22 | * Select and "PS" buttons for PlayStation 3
23 | * Compatibility improvements for the volume buttons
24 |
25 |
26 |
27 | Version 2.1
28 | -----------
29 | * Fixed PlayStation 3 pairing problem
30 |
31 |
32 |
33 | Version 2.0
34 | -----------
35 | * Fixed PlayStation 3 support
36 | * New Holo Dark inspired design
37 | * Simplified pairing process
38 | * Improved mouse movement, especially for Mac OS X
39 | * The touchpad can display mouse buttons
40 | * Home, Back and Menu buttons for Android devices
41 | * Extra buttons for PlayStation 3
42 | * It is possible to scroll horizontal
43 | * New option for disabling the fling scroll feature
44 | * New help menu that explains how to control the mouse
45 | * Pasting long text shows a cancelable progress dialog
46 | * Fixed a problem with the MultiLing Keyboard
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | This application uses the following licenses:
2 |
3 | * Application Daemon Source Code
4 |
5 | The application daemon source code inside the directory "jni" is
6 | licensed under the GNU General Public License, Version 3. The full
7 | license text can be found in the "LICENSE.GPL" file.
8 |
9 |
10 | * Android Application Source Code
11 |
12 | The Android application source code inside the directory "src" is
13 | licensed under the Apache License, Version 2.0. The full license text
14 | can be found at
15 |
16 | http://www.apache.org/licenses/LICENSE-2.0
17 |
18 |
19 | * Images
20 |
21 | The images inside the directories "drawablesrc" and "res/drawable*" are
22 | licensed under the Creative Commons BY-SA 3.0 License. The full license
23 | text can be found at
24 |
25 | http://creativecommons.org/licenses/by-sa/3.0/
26 |
27 | The application icon is a modified version of the
28 | "accessories-character-map" icon from the GNOME Project artwork. For
29 | more information look at
30 |
31 | http://www.gnome.org
32 | http://git.gnome.org/browse/gnome-icon-theme
33 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | BlueCtrl
2 | ========
3 |
4 | **REQUIRES ROOT PERMISSIONS**
5 | **NOT COMPATIBLE WITH ANDROID 4.2**
6 |
7 | BlueCtrl is an open source Bluetooth input device emulator that can control remote devices. This means that you can use the touchscreen and keyboard of your Android device to control other devices which support Bluetooth.
8 |
9 | Because this app is using the Bluetooth input standard, it supports various operating systems without any special server software. It has been successfully tested with the following systems:
10 |
11 | * Android
12 | * iOS
13 | * Linux (Fedora, Ubuntu...)
14 | * Mac OS X
15 | * PlayStation 3
16 | * Windows
17 |
18 | Please note that if you want to use this app with Microsoft Windows, you probably need to disable a conflicting Android service. For more information look at:
19 |
20 | https://github.com/RonsDev/BlueCtrl/wiki/Bluetooth-input-service-conflict
21 |
22 | This app requires root permissions because it needs direct access to the Bluetooth adapter. Another restriction is that it is only compatible with a specific Bluetooth stack that is called BlueZ, which is used on many but not all devices with a Android version smaller 4.2.
23 |
24 |
25 |
26 | Build Requirements
27 | ------------------
28 |
29 | * Android SDK
30 | * Android NDK
31 | * Apache Ant
32 |
33 |
34 |
35 | Build Preparations
36 | ------------------
37 |
38 | The build system must know where it can find the Android SDK and NDK. Therefor copy the `local.properties.example` file, name it `local.properties` and adjust the content of the file.
39 |
40 | The next step is to add the required BlueZ library file and the associated header files to the Android NDK. This is necessary because the NDK stable API doesn't include BlueZ.
41 |
42 | The easiest way to get the library file is to extract it from an existing Android device with the following command:
43 |
44 | adb pull /system/lib/libbluetooth.so
45 |
46 | After that put the extracted `libbluetooth.so` file to the following directory inside the Android NDK:
47 |
48 | platforms/android-9/arch-arm/usr/lib
49 |
50 | Now you must get the header files for the bluetooth and cutils includes. You can download them from the following two repositories from the CyanogenMod project:
51 |
52 | https://github.com/CyanogenMod/android_external_bluetooth_bluez
53 | https://github.com/CyanogenMod/android_system_core
54 |
55 | Then copy the directory `lib/bluetooth` from the Android BlueZ code and the directory `include/cutils` from the Android System Core code to the following directory inside the Android NDK:
56 |
57 | platforms/android-9/arch-arm/usr/include/
58 |
59 |
60 |
61 | Building
62 | --------
63 |
64 | Open a command-line and navigate to the root of your project directory. Then execute either `ant debug` or `ant release` to create the desired .apk file inside the projects `bin/` directory. If you use the release target, you also have to sign the .apk and then align it with `zipalign`.
65 |
--------------------------------------------------------------------------------
/assets/keymaps/en_US:
--------------------------------------------------------------------------------
1 | // ===== No Modifier =====
2 | ` 0 53 // `
3 | 1 0 30 // 1
4 | 2 0 31 // 2
5 | 3 0 32 // 3
6 | 4 0 33 // 4
7 | 5 0 34 // 5
8 | 6 0 35 // 6
9 | 7 0 36 // 7
10 | 8 0 37 // 8
11 | 9 0 38 // 9
12 | 0 0 39 // 0
13 | - 0 45 // -
14 | = 0 46 // =
15 | q 0 20 // q
16 | w 0 26 // w
17 | e 0 8 // e
18 | r 0 21 // r
19 | t 0 23 // t
20 | y 0 28 // y
21 | u 0 24 // u
22 | i 0 12 // i
23 | o 0 18 // o
24 | p 0 19 // p
25 | [ 0 47 // [
26 | ] 0 48 // ]
27 | a 0 4 // a
28 | s 0 22 // s
29 | d 0 7 // d
30 | f 0 9 // f
31 | g 0 10 // g
32 | h 0 11 // h
33 | j 0 13 // j
34 | k 0 14 // k
35 | l 0 15 // l
36 | ; 0 51 // ;
37 | ' 0 52 // '
38 | \ 0 49 // \
39 | z 0 29 // z
40 | x 0 27 // x
41 | c 0 6 // c
42 | v 0 25 // v
43 | b 0 5 // b
44 | n 0 17 // n
45 | m 0 16 // m
46 | , 0 54 // ,
47 | . 0 55 // .
48 | / 0 56 // /
49 |
50 | // ===== Shift Modifier =====
51 | ~ 2 53 // `
52 | ! 2 30 // 1
53 | @ 2 31 // 2
54 | # 2 32 // 3
55 | $ 2 33 // 4
56 | % 2 34 // 5
57 | ^ 2 35 // 6
58 | & 2 36 // 7
59 | * 2 37 // 8
60 | ( 2 38 // 9
61 | ) 2 39 // 0
62 | _ 2 45 // -
63 | + 2 46 // =
64 | Q 2 20 // q
65 | W 2 26 // w
66 | E 2 8 // e
67 | R 2 21 // r
68 | T 2 23 // t
69 | Y 2 28 // y
70 | U 2 24 // u
71 | I 2 12 // i
72 | O 2 18 // o
73 | P 2 19 // p
74 | { 2 47 // [
75 | } 2 48 // ]
76 | A 2 4 // a
77 | S 2 22 // s
78 | D 2 7 // d
79 | F 2 9 // f
80 | G 2 10 // g
81 | H 2 11 // h
82 | J 2 13 // j
83 | K 2 14 // k
84 | L 2 15 // l
85 | : 2 51 // ;
86 | " 2 52 // '
87 | | 2 49 // \
88 | Z 2 29 // z
89 | X 2 27 // x
90 | C 2 6 // c
91 | V 2 25 // v
92 | B 2 5 // b
93 | N 2 17 // n
94 | M 2 16 // m
95 | < 2 54 // ,
96 | > 2 55 // .
97 | ? 2 56 // /
98 |
--------------------------------------------------------------------------------
/assets/keymaps/template:
--------------------------------------------------------------------------------
1 | // ****************************************************************************
2 | // The Keymap file is used to translate a character into a Keyboard layout
3 | // specific sequence of HID Reports. Each line should start with the character
4 | // and is followed by the representing Report sequence.
5 | //
6 | // This template contains already the Report sequences and only the character
7 | // in the first column must be inserted. To insert the correct character you
8 | // just need to press the key on your Keyboard that corresponds to the key in
9 | // the comment on a standard English Keyboard. Also note that there are
10 | // different blocks where you additionally must hold the right modifier key.
11 | // If a Report sequence doesn't create any character, the line can be removed
12 | // completely.
13 | // ****************************************************************************
14 |
15 | // ===== No Modifier =====
16 | 0 53 // `
17 | 0 30 // 1
18 | 0 31 // 2
19 | 0 32 // 3
20 | 0 33 // 4
21 | 0 34 // 5
22 | 0 35 // 6
23 | 0 36 // 7
24 | 0 37 // 8
25 | 0 38 // 9
26 | 0 39 // 0
27 | 0 45 // -
28 | 0 46 // =
29 | 0 20 // q
30 | 0 26 // w
31 | 0 8 // e
32 | 0 21 // r
33 | 0 23 // t
34 | 0 28 // y
35 | 0 24 // u
36 | 0 12 // i
37 | 0 18 // o
38 | 0 19 // p
39 | 0 47 // [
40 | 0 48 // ]
41 | 0 4 // a
42 | 0 22 // s
43 | 0 7 // d
44 | 0 9 // f
45 | 0 10 // g
46 | 0 11 // h
47 | 0 13 // j
48 | 0 14 // k
49 | 0 15 // l
50 | 0 51 // ;
51 | 0 52 // '
52 | 0 49 // \
53 | 0 100 // <
54 | 0 29 // z
55 | 0 27 // x
56 | 0 6 // c
57 | 0 25 // v
58 | 0 5 // b
59 | 0 17 // n
60 | 0 16 // m
61 | 0 54 // ,
62 | 0 55 // .
63 | 0 56 // /
64 |
65 | // ===== Shift Modifier =====
66 | 2 53 // `
67 | 2 30 // 1
68 | 2 31 // 2
69 | 2 32 // 3
70 | 2 33 // 4
71 | 2 34 // 5
72 | 2 35 // 6
73 | 2 36 // 7
74 | 2 37 // 8
75 | 2 38 // 9
76 | 2 39 // 0
77 | 2 45 // -
78 | 2 46 // =
79 | 2 20 // q
80 | 2 26 // w
81 | 2 8 // e
82 | 2 21 // r
83 | 2 23 // t
84 | 2 28 // y
85 | 2 24 // u
86 | 2 12 // i
87 | 2 18 // o
88 | 2 19 // p
89 | 2 47 // [
90 | 2 48 // ]
91 | 2 4 // a
92 | 2 22 // s
93 | 2 7 // d
94 | 2 9 // f
95 | 2 10 // g
96 | 2 11 // h
97 | 2 13 // j
98 | 2 14 // k
99 | 2 15 // l
100 | 2 51 // ;
101 | 2 52 // '
102 | 2 49 // \
103 | 2 100 // <
104 | 2 29 // z
105 | 2 27 // x
106 | 2 6 // c
107 | 2 25 // v
108 | 2 5 // b
109 | 2 17 // n
110 | 2 16 // m
111 | 2 54 // ,
112 | 2 55 // .
113 | 2 56 // /
114 |
115 | // ===== Alt Modifier =====
116 | 64 53 // `
117 | 64 30 // 1
118 | 64 31 // 2
119 | 64 32 // 3
120 | 64 33 // 4
121 | 64 34 // 5
122 | 64 35 // 6
123 | 64 36 // 7
124 | 64 37 // 8
125 | 64 38 // 9
126 | 64 39 // 0
127 | 64 45 // -
128 | 64 46 // =
129 | 64 20 // q
130 | 64 26 // w
131 | 64 8 // e
132 | 64 21 // r
133 | 64 23 // t
134 | 64 28 // y
135 | 64 24 // u
136 | 64 12 // i
137 | 64 18 // o
138 | 64 19 // p
139 | 64 47 // [
140 | 64 48 // ]
141 | 64 4 // a
142 | 64 22 // s
143 | 64 7 // d
144 | 64 9 // f
145 | 64 10 // g
146 | 64 11 // h
147 | 64 13 // j
148 | 64 14 // k
149 | 64 15 // l
150 | 64 51 // ;
151 | 64 52 // '
152 | 64 49 // \
153 | 64 100 // <
154 | 64 29 // z
155 | 64 27 // x
156 | 64 6 // c
157 | 64 25 // v
158 | 64 5 // b
159 | 64 17 // n
160 | 64 16 // m
161 | 64 54 // ,
162 | 64 55 // .
163 | 64 56 // /
164 |
165 | // ===== Shift+Alt Modifier =====
166 | 66 53 // `
167 | 66 30 // 1
168 | 66 31 // 2
169 | 66 32 // 3
170 | 66 33 // 4
171 | 66 34 // 5
172 | 66 35 // 6
173 | 66 36 // 7
174 | 66 37 // 8
175 | 66 38 // 9
176 | 66 39 // 0
177 | 66 45 // -
178 | 66 46 // =
179 | 66 20 // q
180 | 66 26 // w
181 | 66 8 // e
182 | 66 21 // r
183 | 66 23 // t
184 | 66 28 // y
185 | 66 24 // u
186 | 66 12 // i
187 | 66 18 // o
188 | 66 19 // p
189 | 66 47 // [
190 | 66 48 // ]
191 | 66 4 // a
192 | 66 22 // s
193 | 66 7 // d
194 | 66 9 // f
195 | 66 10 // g
196 | 66 11 // h
197 | 66 13 // j
198 | 66 14 // k
199 | 66 15 // l
200 | 66 51 // ;
201 | 66 52 // '
202 | 66 49 // \
203 | 66 100 // <
204 | 66 29 // z
205 | 66 27 // x
206 | 66 6 // c
207 | 66 25 // v
208 | 66 5 // b
209 | 66 17 // n
210 | 66 16 // m
211 | 66 54 // ,
212 | 66 55 // .
213 | 66 56 // /
214 |
--------------------------------------------------------------------------------
/doc/RESOURCES:
--------------------------------------------------------------------------------
1 | Bluetooth Documentation
2 | -------------------------------------------------------------------------------
3 |
4 | HID Profile:
5 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=7108
6 |
7 | HID Lite:
8 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=41207
9 |
10 | Device Identification Profile Specification:
11 | https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=75536
12 |
13 |
14 |
15 | USB Documentation
16 | -------------------------------------------------------------------------------
17 |
18 | Device Class Definition for Human Interface Devices (HID):
19 | http://www.usb.org/developers/devclass_docs/HID1_11.pdf
20 |
21 | HID Usage Tables
22 | http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf
23 |
24 | Language Identifiers:
25 | http://www.usb.org/developers/docs/USB_LANGIDs.pdf
26 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/AppleWirelessKeyboard:
--------------------------------------------------------------------------------
1 | 05 01 # Usage Page (Generic Desktop)
2 | 09 06 # Usage (Keyboard)
3 | a1 01 # Collection (Application)
4 | 85 01 # Report ID (1)
5 | 05 07 # Usage Page (Keyboard)
6 | 19 e0 # Usage Minimum (224 = Left Control)
7 | 29 e7 # Usage Maximum (231 = Right GUI)
8 | 15 00 # Logical Minimum (0)
9 | 25 01 # Logical Maximum (1)
10 | 75 01 # Report Size (1)
11 | 95 08 # Report Count (8)
12 | 81 02 # Input (Data, Variable, Absolute) ;Modifier byte
13 | 75 08 # Report Size (8)
14 | 95 01 # Report Count (1)
15 | 81 01 # Input (Constant) ;Reserved byte
16 | 75 01 # Report Size (1)
17 | 95 05 # Report Count (5)
18 | 05 08 # Usage Page (Page# for LEDs)
19 | 19 01 # Usage Minimum (1 = Num Lock)
20 | 29 05 # Usage Maximum (5 = Kana)
21 | 91 02 # Output (Data, Variable, Absolute) ;LED report
22 | 75 03 # Report Size (3)
23 | 95 01 # Report Count (1)
24 | 91 01 # Output (Constant) ;LED report padding
25 | 75 08 # Report Size (8)
26 | 95 06 # Report Count (6)
27 | 15 00 # Logical Minimum (0)
28 | 26 ff 00 # Logical Maximum (255)
29 | 05 07 # Usage Page (Keyboard)
30 | 19 00 # Usage Minimum (0)
31 | 2a ff 00 # Usage Maximum (255)
32 | 81 00 # Input (Data, Array)
33 | c0 # End Collection
34 | 05 0c # Usage Page (Consumer)
35 | 09 01 # Usage (Consumer Control)
36 | a1 01 # Collection (Application)
37 | 85 47 # Report ID (71)
38 | 05 01 # Usage Page (Generic Desktop)
39 | 09 06 # Usage (Keyboard)
40 | a1 02 # Collection (Logical)
41 | 05 06 # Usage Page (Generic Device Controls)
42 | 09 20 # Usage (Battery Strength)
43 | 15 00 # Logical Minimum (0)
44 | 26 ff 00 # Logical Maximum (255)
45 | 75 08 # Report Size (8)
46 | 95 01 # Report Count (1)
47 | 81 02 # Input (Data, Variable, Absolute)
48 | c0 # End Collection
49 | c0 # End Collection
50 | 05 0c # Usage Page (Consumer)
51 | 09 01 # Usage (Consumer Control)
52 | a1 01 # Collection (Application)
53 | 85 11 # Report ID (17)
54 | 15 00 # Logical Minimum (0)
55 | 25 01 # Logical Maximum (1)
56 | 75 01 # Report Size (1)
57 | 95 03 # Report Count (3)
58 | 81 01 # Input (Constant)
59 | 75 01 # Report Size (1)
60 | 95 01 # Report Count (1)
61 | 05 0c # Usage Page (Consumer)
62 | 09 b8 # Usage (Eject)
63 | 81 02 # Input (Data, Variable, Absolute)
64 | 06 ff 00 # Usage Page (Vendor-defined)
65 | 09 03 # Usage (???)
66 | 81 02 # Input (Data, Variable, Absolute)
67 | 75 01 # Report Size (1)
68 | 95 03 # Report Count (3)
69 | 81 01 # Input (Constant)
70 | 05 0c # Usage Page (Consumer)
71 | 85 12 # Report ID (18)
72 | 15 00 # Logical Minimum (0)
73 | 25 01 # Logical Maximum (1)
74 | 75 01 # Report Size (1)
75 | 95 01 # Report Count (1)
76 | 09 cd # Usage (Play/Pause)
77 | 81 02 # Input (Data, Variable, Absolute)
78 | 09 b3 # Usage (Fast Forward)
79 | 81 02 # Input (Data, Variable, Absolute)
80 | 09 b4 # Usage (Rewind)
81 | 81 02 # Input (Data, Variable, Absolute)
82 | 09 b5 # Usage (Scan Next Track)
83 | 81 02 # Input (Data, Variable, Absolute)
84 | 09 b6 # Usage (Scan Previous Track)
85 | 81 02 # Input (Data, Variable, Absolute)
86 | 81 01 # Input (Constant)
87 | 81 01 # Input (Constant)
88 | 81 01 # Input (Constant)
89 | 85 13 # Report ID (19)
90 | 15 00 # Logical Minimum (0)
91 | 25 01 # Logical Maximum (1)
92 | 75 01 # Report Size (1)
93 | 95 01 # Report Count (1)
94 | 06 01 ff # Usage Page (Vendor-defined)
95 | 09 0a # Usage (???)
96 | 81 02 # Input (Data, Variable, Absolute)
97 | 06 01 ff # Usage Page (Vendor-defined)
98 | 09 0c # Usage (???)
99 | 81 22 # Input (Data, Variable, Absolute, No Preferred State)
100 | 75 01 # Report Size (1)
101 | 95 06 # Report Count (6)
102 | 81 01 # Input (Constant) ;Reserved byte
103 | 85 09 # Report ID (9)
104 | 09 0b # Usage (???)
105 | 75 08 # Report Size (8)
106 | 95 01 # Report Count (1)
107 | b1 02 # Feature (Data, Variable, Absolute)
108 | 75 08 # Report Size (8)
109 | 95 02 # Report Count (2)
110 | b1 01 # Feature (Constant)
111 | c0 # End Collection
112 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/AppleWirelessMouse:
--------------------------------------------------------------------------------
1 | 05 01 # Usage Page (Generic Desktop)
2 | 09 02 # Usage (Mouse)
3 | a1 01 # Collection (Application)
4 | 85 10 # Report ID (16)
5 | 05 09 # Usage Page (Button)
6 | 19 01 # Usage Minimum (1)
7 | 29 02 # Usage Maximum (2)
8 | 15 00 # Logical Minimum (0)
9 | 25 01 # Logical Maximum (1)
10 | 95 02 # Report Count (2)
11 | 75 01 # Report Size (1)
12 | 81 02 # Input (Data, Variable, Absolute)
13 | 95 01 # Report Count (1)
14 | 75 06 # Report Size (6)
15 | 81 03 # Input (Constant, Variable)
16 | 05 01 # Usage Page (Generic Desktop)
17 | 09 01 # Usage (Pointer)
18 | a1 00 # Collection (Physical)
19 | 16 01 fe # Logical Minimum (-511)
20 | 26 ff 01 # Logical Maximum (511)
21 | 36 c0 fe # Physical Minimum (-320)
22 | 46 40 01 # Physical Maximum (320)
23 | 65 13 # Unit (Inches)
24 | 55 0d # Unit Exponent (-3)
25 | 09 30 # Usage (X)
26 | 09 31 # Usage (Y)
27 | 75 10 # Report Size (16)
28 | 95 02 # Report Count (2)
29 | 81 06 # Input (Data, Variable, Relative)
30 | c0 # End Collection
31 | 05 06 # Usage Page (Generic Device Controls)
32 | 09 20 # Usage (Battery Strength)
33 | 85 47 # Report ID (71)
34 | 15 00 # Logical Minimum (0)
35 | 25 64 # Logical Maximum (100)
36 | 75 08 # Report Size (8)
37 | 95 01 # Report Count (1)
38 | b1 a2 # Feature (Data, Variable, Absolute, No Preferred, Volatile)
39 | 06 02 ff # Usage Page (Vendor-defined)
40 | 09 55 # Usage (???)
41 | 85 55 # Report ID (85)
42 | 15 00 # Logical Minimum (0)
43 | 26 ff 00 # Logical Maximum (255)
44 | 75 08 # Report Size (8)
45 | 95 40 # Report Count (64)
46 | b1 a2 # Feature (Data, Variable, Absolute, No Preferred, Volatile)
47 | c0 # End Collection
48 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/BarcodeScanner:
--------------------------------------------------------------------------------
1 | 05 01 # Usage Page (Generic Desktop)
2 | 09 06 # Usage (Keyboard)
3 | a1 01 # Collection (Application)
4 | 05 07 # Usage Page (Keyboard)
5 | 85 01 # Report ID (1)
6 | 19 e0 # Usage Minimum (224 = Left Control)
7 | 29 e7 # Usage Maximum (231 = Right GUI)
8 | 15 00 # Logical Minimum (0)
9 | 25 01 # Logical Maximum (1)
10 | 75 01 # Report Size (1)
11 | 95 08 # Report Count (8)
12 | 81 02 # Input (Data, Variable, Absolute) ;Modifier byte
13 | 95 01 # Report Count (1)
14 | 75 08 # Report Size (8)
15 | 81 01 # Input (Constant) ;Reserved byte
16 | 95 05 # Report Count (5)
17 | 75 01 # Report Size (1)
18 | 05 08 # Usage Page (Page# for LEDs)
19 | 85 01 # Report ID (1)
20 | 19 01 # Usage Minimum (1 = Num Lock)
21 | 29 05 # Usage Maximum (5 = Kana)
22 | 91 02 # Output (Data, Variable, Absolute) ;LED report
23 | 95 01 # Report Count (1)
24 | 75 03 # Report Size (3)
25 | 91 03 # Output (Constant, Variable) ;LED report padding
26 | 95 06 # Report Count (6)
27 | 75 08 # Report Size (8)
28 | 15 00 # Logical Minimum (0)
29 | 25 65 # Logical Maximum (101)
30 | 05 07 # Usage Page (Keyboard)
31 | 19 00 # Usage Minimum (0)
32 | 29 65 # Usage Maximum (101)
33 | 81 00 # Input (Data, Array)
34 | c0 # End Collection
35 | 05 0c # Usage Page (Consumer)
36 | 09 01 # Usage (Consumer Control)
37 | a1 01 # Collection (Application)
38 | 85 02 # Report ID (2)
39 | 05 0c # Usage Page (Consumer)
40 | 15 00 # Logical Minimum (0)
41 | 25 01 # Logical Maximum (1)
42 | 0a 23 02 # Usage (AC Home?)
43 | 0a 8a 01 # Usage (AL Email Reader?)
44 | 0a 21 02 # Usage (AC Search?)
45 | 75 01 # Report Size (1)
46 | 95 03 # Report Count (3)
47 | 81 02 # Input (Data, Variable, Absolute)
48 | 75 01 # Report Size (1)
49 | 95 05 # Report Count (5)
50 | 81 01 # Input (Constant)
51 | 05 08 # Usage Page (Page# for LEDs)
52 | 85 ff # Report ID (255)
53 | 95 01 # Report Count (1)
54 | 75 02 # Report Size (2)
55 | 09 24 # Usage (Reserved)
56 | 09 26 # Usage (Reserved)
57 | 81 02 # Input (Data, Variable, Absolute)
58 | 75 06 # Report Size (6)
59 | 81 01 # Input (Constant)
60 | c0 # End Collection
61 | 05 0c # Usage Page (Consumer)
62 | 09 01 # Usage (Consumer Control)
63 | a1 01 # Collection (Application)
64 | 85 11 # Report ID (17)
65 | 15 00 # Logical Minimum (0)
66 | 25 01 # Logical Maximum (1)
67 | 75 01 # Report Size (1)
68 | 95 03 # Report Count (3)
69 | 81 01 # Input (Constant)
70 | 75 01 # Report Size (1)
71 | 95 01 # Report Count (1)
72 | 05 0c # Usage Page (Consumer)
73 | 09 b8 # Usage (Eject)
74 | 81 02 # Input (Data, Variable, Absolute)
75 | 06 ff 00 # Usage Page (Vendor-defined)
76 | 09 03 # Usage (???)
77 | 81 02 # Input (Data, Variable, Absolute)
78 | 75 01 # Report Size (1)
79 | 95 03 # Report Count (3)
80 | 81 01 # Input (Constant)
81 | 05 0c # Usage Page (Consumer)
82 | 85 12 # Report ID (18)
83 | 15 00 # Logical Minimum (0)
84 | 25 01 # Logical Maximum (1)
85 | 75 01 # Report Size (1)
86 | 95 01 # Report Count (1)
87 | 09 cd # Usage (Play/Pause)
88 | 81 02 # Input (Data, Variable, Absolute)
89 | 09 b3 # Usage (Fast Forward)
90 | 81 02 # Input (Data, Variable, Absolute)
91 | 09 b4 # Usage (Rewind)
92 | 81 02 # Input (Data, Variable, Absolute)
93 | 09 b5 # Usage (Scan Next Track)
94 | 81 02 # Input (Data, Variable, Absolute)
95 | 09 b6 # Usage (Scan Previous Track)
96 | 81 02 # Input (Data, Variable, Absolute)
97 | 81 01 # Input (Constant)
98 | 81 01 # Input (Constant)
99 | 81 01 # Input (Constant)
100 | 85 13 # Report ID (19)
101 | 15 00 # Logical Minimum (0)
102 | 25 01 # Logical Maximum (1)
103 | 75 01 # Report Size (1)
104 | 95 01 # Report Count (1)
105 | 06 01 ff # Usage Page (Vendor-defined)
106 | 09 0a # Usage (???)
107 | 81 02 # Input (Data, Variable, Absolute)
108 | 75 01 # Report Size (1)
109 | 95 07 # Report Count (7)
110 | 81 01 # Input (Constant)
111 | c0 # End Collection
112 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/LogitechM500Mouse:
--------------------------------------------------------------------------------
1 | Item(Global): Usage Page, data= [ 0x01 ] 1
2 | Generic Desktop Controls
3 | Item(Local ): Usage, data= [ 0x02 ] 2
4 | Mouse
5 | Item(Main ): Collection, data= [ 0x01 ] 1
6 | Application
7 | Item(Local ): Usage, data= [ 0x01 ] 1
8 | Pointer
9 | Item(Main ): Collection, data= [ 0x00 ] 0
10 | Physical
11 | Item(Global): Usage Page, data= [ 0x09 ] 9
12 | Buttons
13 | Item(Local ): Usage Minimum, data= [ 0x01 ] 1
14 | Button 1 (Primary)
15 | Item(Local ): Usage Maximum, data= [ 0x08 ] 8
16 | (null)
17 | Item(Global): Logical Minimum, data= [ 0x00 ] 0
18 | Item(Global): Logical Maximum, data= [ 0x01 ] 1
19 | Item(Global): Report Count, data= [ 0x08 ] 8
20 | Item(Global): Report Size, data= [ 0x01 ] 1
21 | Item(Main ): Input, data= [ 0x02 ] 2
22 | Data Variable Absolute No_Wrap Linear
23 | Preferred_State No_Null_Position Non_Volatile Bitfield
24 | Item(Global): Report Count, data= [ 0x00 ] 0
25 | Item(Main ): Input, data= [ 0x03 ] 3
26 | Constant Variable Absolute No_Wrap Linear
27 | Preferred_State No_Null_Position Non_Volatile Bitfield
28 | Item(Global): Usage Page, data= [ 0x01 ] 1
29 | Generic Desktop Controls
30 | Item(Local ): Usage, data= [ 0x30 ] 48
31 | Direction-X
32 | Item(Local ): Usage, data= [ 0x31 ] 49
33 | Direction-Y
34 | Item(Global): Logical Minimum, data= [ 0x01 0xf8 ] 63489
35 | Item(Global): Logical Maximum, data= [ 0xff 0x07 ] 2047
36 | Item(Global): Report Size, data= [ 0x0c ] 12
37 | Item(Global): Report Count, data= [ 0x02 ] 2
38 | Item(Main ): Input, data= [ 0x06 ] 6
39 | Data Variable Relative No_Wrap Linear
40 | Preferred_State No_Null_Position Non_Volatile Bitfield
41 | Item(Local ): Usage, data= [ 0x38 ] 56
42 | Wheel
43 | Item(Global): Logical Minimum, data= [ 0x81 ] 129
44 | Item(Global): Logical Maximum, data= [ 0x7f ] 127
45 | Item(Global): Report Size, data= [ 0x08 ] 8
46 | Item(Global): Report Count, data= [ 0x01 ] 1
47 | Item(Main ): Input, data= [ 0x06 ] 6
48 | Data Variable Relative No_Wrap Linear
49 | Preferred_State No_Null_Position Non_Volatile Bitfield
50 | Item(Global): Usage Page, data= [ 0x0c ] 12
51 | Consumer
52 | Item(Local ): Usage, data= [ 0x38 0x02 ] 568
53 | AC Pan
54 | Item(Global): Report Count, data= [ 0x01 ] 1
55 | Item(Main ): Input, data= [ 0x06 ] 6
56 | Data Variable Relative No_Wrap Linear
57 | Preferred_State No_Null_Position Non_Volatile Bitfield
58 | Item(Main ): End Collection, data=none
59 | Item(Main ): End Collection, data=none
60 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/RazerCopperheadMouse:
--------------------------------------------------------------------------------
1 | Item(Global): Usage Page, data= [ 0x01 ] 1
2 | Generic Desktop Controls
3 | Item(Local ): Usage, data= [ 0x02 ] 2
4 | Mouse
5 | Item(Main ): Collection, data= [ 0x01 ] 1
6 | Application
7 | Item(Local ): Usage, data= [ 0x01 ] 1
8 | Pointer
9 | Item(Main ): Collection, data= [ 0x00 ] 0
10 | Physical
11 | Item(Global): Usage Page, data= [ 0x09 ] 9
12 | Buttons
13 | Item(Local ): Usage Minimum, data= [ 0x01 ] 1
14 | Button 1 (Primary)
15 | Item(Local ): Usage Maximum, data= [ 0x07 ] 7
16 | (null)
17 | Item(Global): Logical Minimum, data= [ 0x00 ] 0
18 | Item(Global): Logical Maximum, data= [ 0x01 ] 1
19 | Item(Global): Report Count, data= [ 0x08 ] 8
20 | Item(Global): Report Size, data= [ 0x01 ] 1
21 | Item(Main ): Input, data= [ 0x02 ] 2
22 | Data Variable Absolute No_Wrap Linear
23 | Preferred_State No_Null_Position Non_Volatile Bitfield
24 | Item(Global): Usage Page, data= [ 0x00 0xff ] 65280
25 | (null)
26 | Item(Local ): Usage, data= [ 0x40 ] 64
27 | (null)
28 | Item(Global): Report Count, data= [ 0x02 ] 2
29 | Item(Global): Report Size, data= [ 0x08 ] 8
30 | Item(Global): Logical Minimum, data= [ 0x81 ] 129
31 | Item(Global): Logical Maximum, data= [ 0x7f ] 127
32 | Item(Main ): Input, data= [ 0x02 ] 2
33 | Data Variable Absolute No_Wrap Linear
34 | Preferred_State No_Null_Position Non_Volatile Bitfield
35 | Item(Global): Usage Page, data= [ 0x01 ] 1
36 | Generic Desktop Controls
37 | Item(Local ): Usage, data= [ 0x38 ] 56
38 | Wheel
39 | Item(Global): Logical Minimum, data= [ 0x81 ] 129
40 | Item(Global): Logical Maximum, data= [ 0x7f ] 127
41 | Item(Global): Report Size, data= [ 0x08 ] 8
42 | Item(Global): Report Count, data= [ 0x01 ] 1
43 | Item(Main ): Input, data= [ 0x06 ] 6
44 | Data Variable Relative No_Wrap Linear
45 | Preferred_State No_Null_Position Non_Volatile Bitfield
46 | Item(Local ): Usage, data= [ 0x30 ] 48
47 | Direction-X
48 | Item(Local ): Usage, data= [ 0x31 ] 49
49 | Direction-Y
50 | Item(Global): Logical Minimum, data= [ 0x00 0x80 ] 32768
51 | Item(Global): Logical Maximum, data= [ 0xff 0x7f ] 32767
52 | Item(Global): Report Size, data= [ 0x10 ] 16
53 | Item(Global): Report Count, data= [ 0x02 ] 2
54 | Item(Main ): Input, data= [ 0x06 ] 6
55 | Data Variable Relative No_Wrap Linear
56 | Preferred_State No_Null_Position Non_Volatile Bitfield
57 | Item(Main ): End Collection, data=none
58 | Item(Main ): End Collection, data=none
59 |
--------------------------------------------------------------------------------
/doc/hiddescriptors/SonyBDRemote:
--------------------------------------------------------------------------------
1 | 05 01 # Usage Page (Generic Desktop)
2 | 09 05 # Usage (Game Pad)
3 | a1 01 # Collection (Application)
4 | 85 01 # Report ID (1)
5 | 15 00 # Logical Minimum (0)
6 | 26 ff 00 # Logical Maximum (255)
7 | 75 08 # Report Size (8)
8 | 95 0b # Report Count (11)
9 | 06 00 ff # Usage Page (Vendor-defined)
10 | 09 01 # Usage (???)
11 | 81 00 # Input (Data, Array)
12 | 85 01 # Report ID (1)
13 | 95 0b # Report Count (11)
14 | 09 01 # Usage (???)
15 | b1 00 # Feature (Data, Array)
16 | 85 02 # Report ID (2)
17 | 95 0b # Report Count (11)
18 | 09 01 # Usage (???)
19 | b1 00 # Feature (Data, Array)
20 | 85 03 # Report ID (3)
21 | 95 0b # Report Count (11)
22 | 09 01 # Usage (???)
23 | b1 00 # Feature (Data, Array)
24 | 85 04 # Report ID (4)
25 | 95 0b # Report Count (11)
26 | 09 01 # Usage (???)
27 | b1 00 # Feature (Data, Array)
28 | 85 05 # Report ID (5)
29 | 95 0b # Report Count (11)
30 | 09 01 # Usage (???)
31 | b1 00 # Feature (Data, Array)
32 | 85 06 # Report ID (6)
33 | 95 0b # Report Count (11)
34 | 09 01 # Usage (???)
35 | b1 00 # Feature (Data, Array)
36 | c0 # End Collection
37 |
--------------------------------------------------------------------------------
/drawablesrc/btn_android_back.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
107 |
--------------------------------------------------------------------------------
/drawablesrc/btn_android_home.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
103 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_circle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
103 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_ps.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
112 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_select.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
116 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_square.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
100 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_start.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
114 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_triangle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
114 |
--------------------------------------------------------------------------------
/drawablesrc/btn_ps3_x.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
97 |
--------------------------------------------------------------------------------
/drawablesrc/disconnected.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
117 |
--------------------------------------------------------------------------------
/drawablesrc/problem.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
107 |
--------------------------------------------------------------------------------
/jni/Android.mk:
--------------------------------------------------------------------------------
1 | LOCAL_PATH := $(call my-dir)
2 |
3 | include $(CLEAR_VARS)
4 |
5 | LOCAL_MODULE := bluectrld
6 |
7 | LOCAL_SRC_FILES := \
8 | bluectrld.c \
9 | error.c \
10 | hidhci.c \
11 | hidipc.c \
12 | hidl2cap.c \
13 | hidsdp.c \
14 | log.c \
15 |
16 | LOCAL_LDLIBS := -lbluetooth -llog
17 |
18 | include $(BUILD_EXECUTABLE)
19 |
--------------------------------------------------------------------------------
/jni/bluectrld.h:
--------------------------------------------------------------------------------
1 | /*
2 | * BlueCtrl daemon
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #ifndef __BLUECTRLD_H
23 | #define __BLUECTRLD_H
24 |
25 | #include
26 |
27 |
28 | /*
29 | * Get the device ID of the Bluetooth adapter which is used by the daemon.
30 | *
31 | * Returns:
32 | * The Bluetooth adapter device ID.
33 | */
34 | int hidc_get_app_dev_id();
35 |
36 | /*
37 | * Get the Bluetooth address of the Bluetooth adapter which is used by the
38 | * daemon.
39 | *
40 | * Returns:
41 | * The Bluetooth address.
42 | */
43 | bdaddr_t *hidc_get_app_dev_bdaddr();
44 |
45 |
46 | /*
47 | * Shutdown the daemon.
48 | */
49 | void hidc_shutdown();
50 |
51 | #endif
52 |
--------------------------------------------------------------------------------
/jni/error.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Error constants and helper functions
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #include
23 |
24 | #include "error.h"
25 |
26 |
27 | int hidc_convert_errno(int en)
28 | {
29 | switch (en) {
30 | case EACCES:
31 | return HIDC_EC_ACCES;
32 | case EPERM:
33 | return HIDC_EC_PERM;
34 | case ENODEV:
35 | return HIDC_EC_NODEV;
36 | case ENOTCONN:
37 | return HIDC_EC_NOTCONN;
38 | case ENOENT:
39 | return HIDC_EC_NOENT;
40 | case EADDRINUSE:
41 | return HIDC_EC_ADDRINUSE;
42 | case EHOSTDOWN:
43 | return HIDC_EC_HOSTDOWN;
44 | case ECONNREFUSED:
45 | return HIDC_EC_CONNREFUSED;
46 | case ETIMEDOUT:
47 | return HIDC_EC_TIMEDOUT;
48 | case EALREADY:
49 | return HIDC_EC_ALREADY;
50 | case EBADE:
51 | return HIDC_EC_BADE;
52 | case ECONNRESET:
53 | return HIDC_EC_CONNRESET;
54 | default:
55 | return HIDC_EC_UNKNOWN;
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/jni/error.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Error constants and helper functions
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #ifndef __ERROR_H
23 | #define __ERROR_H
24 |
25 | /* Error Codes */
26 | enum {
27 | HIDC_EC_UNKNOWN = -10, /* Unknown error */
28 | HIDC_EC_INVBDADDR = -20, /* Invalid Bluetooth address */
29 |
30 | HIDC_EC_ACCES = -51, /* Permission denied */
31 | HIDC_EC_PERM = -52, /* Operation not permitted */
32 | HIDC_EC_NODEV = -53, /* No such device */
33 | HIDC_EC_NOTCONN = -54, /* The socket is not connected */
34 | HIDC_EC_NOENT = -55, /* No such file or directory */
35 | HIDC_EC_ADDRINUSE = -56, /* Address already in use */
36 | HIDC_EC_HOSTDOWN = -57, /* Host is down */
37 | HIDC_EC_CONNREFUSED = -58, /* Connection refused */
38 | HIDC_EC_TIMEDOUT = -59, /* Connection timed out */
39 | HIDC_EC_ALREADY = -60, /* Connection already in progress */
40 | HIDC_EC_BADE = -61, /* Invalid exchange */
41 | HIDC_EC_CONNRESET = -62, /* Connection reset by peer */
42 | };
43 |
44 |
45 | /*
46 | * Convert an errno.h error number into a project specific error code.
47 | *
48 | * Parameters:
49 | * en: error number defined in errno.h.
50 | *
51 | * Returns:
52 | * A project specific error code.
53 | */
54 | int hidc_convert_errno(int en);
55 |
56 | #endif
57 |
--------------------------------------------------------------------------------
/jni/hidhci.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Host/Controller Interface (HCI) functions
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #ifndef __HIDHCI_H
23 | #define __HIDHCI_H
24 |
25 | #include
26 |
27 |
28 | /*
29 | * Get the Bluetooth address for the given device ID.
30 | *
31 | * Parameters:
32 | * device_id: The Bluetooth device ID.
33 | * device_bdaddr: The result.
34 | *
35 | * Returns:
36 | * 0 on success or a negative error code (defined in error.h) on failure.
37 | */
38 | int hidc_get_device_bdaddr(int device_id, bdaddr_t *device_bdaddr);
39 |
40 |
41 | /*
42 | * Activate or deactivate the visibility of the Bluetooth adapter. If it is
43 | * visible it can be seen by other Bluetooth devices so they can pair.
44 | *
45 | * Parameters:
46 | * is_discoverable: 1=activate; 0=deactivate
47 | *
48 | * Returns:
49 | * 0 on success or a negative error code (defined in error.h) on failure.
50 | */
51 | int hidc_set_discoverable(int is_discoverable);
52 |
53 | /*
54 | * Deactivate the visibility of the Bluetooth adapter if it was activated
55 | * with the hidc_set_discoverable function.
56 | *
57 | * Returns:
58 | * 0 on success or a negative error code (defined in error.h) on failure.
59 | */
60 | int hidc_reset_discoverable();
61 |
62 |
63 | /*
64 | * Return the original Bluetooth adapter Device Class if it was changed or
65 | * 0 if unchanged.
66 | *
67 | * Returns:
68 | * The original Device Class or 0 if unchanged.
69 | */
70 | int hidc_get_org_device_class();
71 |
72 | /*
73 | * Change the Bluetooth adapter Device Class to a HID Device Class.
74 | *
75 | * The Device Class is used by hosts to filter for specific devices. It is not
76 | * as important as the SDP record. According to the documentation a HID Device
77 | * Class isn't required, but some Bluetooth stacks won't accept the HID
78 | * if it is not defined.
79 | *
80 | * The Device Class will be changed to "Peripheral, Keyboard" which seems to
81 | * have the best compatibility (iOS requires it); although the Device Class
82 | * "Peripheral, Combo Keyboard/Pointing device" would be more correct.
83 | *
84 | * Returns:
85 | * 0 on success or a negative error code (defined in error.h) on failure.
86 | */
87 | int hidc_set_hid_device_class();
88 |
89 | /*
90 | * Restore the original Device Class of the Bluetooth adapter.
91 | *
92 | * Returns:
93 | * 0 on success or a negative error code (defined in error.h) on failure.
94 | */
95 | int hidc_reset_device_class();
96 |
97 | /*
98 | * Wait until the Service part of the Bluetooth adapter Class is empty.
99 | *
100 | * Parameters:
101 | * timeout: Maximum wait time in seconds.
102 | */
103 | void hidc_wait_for_empty_service_class(int timeout);
104 |
105 | #endif
106 |
--------------------------------------------------------------------------------
/jni/hidsdp.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Service Discovery Protocol (SDP) registration of Human Interface
3 | * Devices (HID)
4 | */
5 | /*
6 | * Copyright (C) 2012
7 | *
8 | * This program is free software: you can redistribute it and/or modify
9 | * it under the terms of the GNU General Public License as published by
10 | * the Free Software Foundation, either version 3 of the License, or
11 | * (at your option) any later version.
12 | *
13 | * This program is distributed in the hope that it will be useful,
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 | * GNU General Public License for more details.
17 | *
18 | * You should have received a copy of the GNU General Public License
19 | * along with this program. If not, see .
20 | *
21 | */
22 |
23 | #ifndef __HIDSDP_H
24 | #define __HIDSDP_H
25 |
26 | /*
27 | * Minor Device Classes
28 | */
29 | #define HIDC_MDC_KEYBOARD 0x40
30 | #define HIDC_MDC_POINTER 0x80
31 | #define HIDC_MDC_COMBO_KEY_POINT 0xc0
32 |
33 |
34 | /*
35 | * Register the HID Service Record. The Service Record describes the
36 | * capabilities and properties of the HID.
37 | *
38 | * Returns:
39 | * 0 on success or a negative error code (defined in error.h) on failure.
40 | */
41 | int hidc_sdp_register();
42 |
43 | /*
44 | * Unregister the HID Service Record.
45 | *
46 | * Returns:
47 | * 0 on success or a negative error code (defined in error.h) on failure.
48 | */
49 | int hidc_sdp_unregister();
50 |
51 |
52 | /*
53 | * Deactivate all Service Records except for the HID Service Record.
54 | *
55 | * Returns:
56 | * 0 on success or a negative error code (defined in error.h) on failure.
57 | */
58 | int hidc_deactivate_other_services();
59 |
60 | /*
61 | * Reactivate all previously deactivated Service Records.
62 | *
63 | * Returns:
64 | * 0 on success or a negative error code (defined in error.h) on failure.
65 | */
66 | int hidc_reactivate_other_services();
67 |
68 | #endif
69 |
--------------------------------------------------------------------------------
/jni/log.c:
--------------------------------------------------------------------------------
1 | /*
2 | * Log functions
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #include
23 | #include
24 | #include
25 | #include
26 |
27 | #ifdef __ANDROID__
28 | #include
29 | #else
30 | #include
31 | #endif
32 |
33 | #include "log.h"
34 |
35 |
36 | static int is_debug_active = 0;
37 |
38 | #ifdef __ANDROID__
39 | static char *log_tag = "";
40 | #endif
41 |
42 |
43 | void log_init(const char *ident, int detach, int debug)
44 | {
45 | #ifdef __ANDROID__
46 | log_tag = (char *)ident;
47 | #else
48 | int option = LOG_NDELAY | LOG_PID;
49 | if (!detach)
50 | option |= LOG_PERROR;
51 |
52 | openlog(ident, option, LOG_DAEMON);
53 | #endif
54 |
55 | is_debug_active = debug;
56 | }
57 |
58 | int log_is_debug_active()
59 | {
60 | return is_debug_active;
61 | }
62 |
63 | void log_d(const char *format, ...)
64 | {
65 | if (is_debug_active) {
66 | va_list ap;
67 |
68 | va_start(ap, format);
69 |
70 | #ifdef __ANDROID__
71 | __android_log_vprint(ANDROID_LOG_DEBUG, log_tag, format, ap);
72 | #else
73 | vsyslog(LOG_DEBUG, format, ap);
74 | #endif
75 |
76 | va_end(ap);
77 | }
78 | }
79 |
80 | void log_i(const char *format, ...)
81 | {
82 | va_list ap;
83 |
84 | va_start(ap, format);
85 |
86 | #ifdef __ANDROID__
87 | __android_log_vprint(ANDROID_LOG_INFO, log_tag, format, ap);
88 | #else
89 | vsyslog(LOG_INFO, format, ap);
90 | #endif
91 |
92 | va_end(ap);
93 | }
94 |
95 | void log_e(const char *format, ...)
96 | {
97 | va_list ap;
98 |
99 | va_start(ap, format);
100 |
101 | #ifdef __ANDROID__
102 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, format, ap);
103 | #else
104 | vsyslog(LOG_ERR, format, ap);
105 | #endif
106 |
107 | va_end(ap);
108 | }
109 |
110 | void log_ec(int errorcode, const char *format, ...)
111 | {
112 | size_t msg_size;
113 | char *msg;
114 | char *ec_msg;
115 |
116 | va_list ap;
117 |
118 | va_start(ap, format);
119 |
120 | if (errorcode == 0) {
121 | #ifdef __ANDROID__
122 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, format, ap);
123 | #else
124 | vsyslog(LOG_ERR, format, ap);
125 | #endif
126 | }
127 | else {
128 | ec_msg = strerror(errorcode);
129 |
130 | msg_size = strlen(format) + strlen(ec_msg) + 20;
131 | msg = malloc(msg_size);
132 | if (!msg) {
133 | log_e("Can't log error code message: malloc error");
134 | return;
135 | }
136 |
137 | snprintf(msg, msg_size, "%s: (%d) %s",
138 | format, errorcode, ec_msg);
139 |
140 | #ifdef __ANDROID__
141 | __android_log_vprint(ANDROID_LOG_ERROR, log_tag, msg, ap);
142 | #else
143 | vsyslog(LOG_ERR, msg, ap);
144 | #endif
145 |
146 | free(msg);
147 | }
148 |
149 | va_end(ap);
150 | }
151 |
--------------------------------------------------------------------------------
/jni/log.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Log functions
3 | */
4 | /*
5 | * Copyright (C) 2012
6 | *
7 | * This program is free software: you can redistribute it and/or modify
8 | * it under the terms of the GNU General Public License as published by
9 | * the Free Software Foundation, either version 3 of the License, or
10 | * (at your option) any later version.
11 | *
12 | * This program is distributed in the hope that it will be useful,
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | * GNU General Public License for more details.
16 | *
17 | * You should have received a copy of the GNU General Public License
18 | * along with this program. If not, see .
19 | *
20 | */
21 |
22 | #ifndef __LOG_H
23 | #define __LOG_H
24 |
25 | /*
26 | * This function should be called before any other log function.
27 | *
28 | * Parameters:
29 | * ident: The program identifier.
30 | * detach: True if the daemon is running in the background.
31 | * detach: True to activate the debug log.
32 | */
33 | void log_init(const char *ident, int detach, int debug);
34 |
35 |
36 | /*
37 | * Get the current debug log state.
38 | *
39 | * Returns:
40 | * True if the debug log is active; False if not.
41 | */
42 | int log_is_debug_active();
43 |
44 | /*
45 | * Log a message with the Debug level.
46 | *
47 | * Parameters:
48 | * format: A format string.
49 | * ...: The format string values.
50 | */
51 | void log_d(const char *format, ...);
52 |
53 | /*
54 | * Log a message with the Info level.
55 | *
56 | * Parameters:
57 | * format: A format string.
58 | * ...: The format string values.
59 | */
60 | void log_i(const char *format, ...);
61 |
62 | /*
63 | * Log a message with the Error level.
64 | *
65 | * Parameters:
66 | * format: A format string.
67 | * ...: The format string values.
68 | */
69 | void log_e(const char *format, ...);
70 |
71 | /*
72 | * Log an error code and a message with the Error level.
73 | *
74 | * Parameters:
75 | * errorcode: A project specific error code.
76 | * format: A format string.
77 | * ...: The format string values.
78 | */
79 | void log_ec(int errorcode, const char *format, ...);
80 |
81 | #endif
82 |
--------------------------------------------------------------------------------
/local.properties.example:
--------------------------------------------------------------------------------
1 | sdk.dir=/path/to/android/sdk
2 | ndk.dir=/path/to/android/ndk
3 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system use,
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 |
10 | # Project target.
11 | target=android-10
12 |
--------------------------------------------------------------------------------
/res/anim/slide_in_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
22 |
24 |
26 |
27 |
--------------------------------------------------------------------------------
/res/anim/slide_in_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
22 |
24 |
26 |
27 |
--------------------------------------------------------------------------------
/res/anim/slide_out_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
22 |
24 |
26 |
27 |
--------------------------------------------------------------------------------
/res/anim/slide_out_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
22 |
24 |
26 |
27 |
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_add.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_keyboard.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_next_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_next_disabled.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_next_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_next_normal.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_previous_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_previous_disabled.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_btn_previous_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_btn_previous_normal.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ab_transparent_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ab_transparent_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/app_icon.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/app_icon_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/app_icon_small.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/bottom_bar_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/bottom_bar_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_android_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_back.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_android_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_home.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_android_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_android_menu.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_circle.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_ps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_ps.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_select.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_square.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_start.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_triangle.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/btn_ps3_x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/btn_ps3_x.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/disconnected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/disconnected.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_ab_back_holo_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ic_ab_back_holo_dark.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_action_send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/ic_action_send.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/list_focused_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/list_focused_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/list_pressed_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/list_pressed_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/menu_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_about.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/menu_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_compose.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/menu_help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_help.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/menu_paste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_paste.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/menu_preferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/menu_preferences.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/problem.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/scroll_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_base.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/scroll_horizontal_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_horizontal_active.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/scroll_vertical_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/scroll_vertical_active.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/search_bt_device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/search_bt_device.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/textfield_activated_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_activated_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/textfield_default_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_default_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_disabled_focused_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/textfield_disabled_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/textfield_disabled_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_down.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_down_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_down_left.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_left.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_right.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_up.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/tutorial_touch_arrow_up_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-hdpi/tutorial_touch_arrow_up_right.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_add.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_keyboard.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_next_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_next_disabled.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_next_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_next_normal.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_previous_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_previous_disabled.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_btn_previous_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_btn_previous_normal.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ab_transparent_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ab_transparent_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/app_icon.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/app_icon_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/app_icon_small.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/bottom_bar_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/bottom_bar_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_android_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_back.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_android_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_home.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_android_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_android_menu.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_circle.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_ps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_ps.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_select.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_square.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_start.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_triangle.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/btn_ps3_x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/btn_ps3_x.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/disconnected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/disconnected.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_ab_back_holo_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ic_ab_back_holo_dark.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_action_send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/ic_action_send.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/list_focused_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/list_focused_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/list_pressed_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/list_pressed_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/menu_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_about.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/menu_compose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_compose.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/menu_help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_help.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/menu_paste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_paste.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/menu_preferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/menu_preferences.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/problem.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/scroll_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_base.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/scroll_horizontal_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_horizontal_active.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/scroll_vertical_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/scroll_vertical_active.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/search_bt_device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/search_bt_device.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/textfield_activated_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_activated_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/textfield_default_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_default_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_disabled_focused_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/textfield_disabled_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/textfield_disabled_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_down.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_down_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_down_left.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_left.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_right.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_up.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/tutorial_touch_arrow_up_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-mdpi/tutorial_touch_arrow_up_right.png
--------------------------------------------------------------------------------
/res/drawable-nodpi/touchpad_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-nodpi/touchpad_background.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_add.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_keyboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_keyboard.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_next_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_next_disabled.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_next_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_next_normal.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_previous_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_previous_disabled.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_btn_previous_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_btn_previous_normal.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ab_transparent_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ab_transparent_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/app_icon.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/app_icon_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/app_icon_small.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/bottom_bar_dark_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/bottom_bar_dark_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_android_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_back.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_android_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_home.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_android_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_android_menu.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_circle.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_ps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_ps.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_select.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_square.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_square.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_start.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_triangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_triangle.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/btn_ps3_x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/btn_ps3_x.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/disconnected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/disconnected.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_ab_back_holo_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ic_ab_back_holo_dark.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_action_send.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/ic_action_send.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/list_focused_holo.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/list_focused_holo.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/list_pressed_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/list_pressed_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/menu_paste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/menu_paste.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/problem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/problem.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/scroll_base.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_base.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/scroll_horizontal_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_horizontal_active.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/scroll_vertical_active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/scroll_vertical_active.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/search_bt_device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/search_bt_device.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/textfield_activated_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_activated_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/textfield_default_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_default_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_disabled_focused_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/textfield_disabled_holo_dark.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_down.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_down_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_down_left.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_left.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_right.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_up.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/tutorial_touch_arrow_up_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/RonsDev/BlueCtrl/91d7763eb7f269b26d55ab03719f6bdb4b2ac494/res/drawable-xhdpi/tutorial_touch_arrow_up_right.png
--------------------------------------------------------------------------------
/res/drawable/ab_btn_next.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/ab_btn_previous.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/ab_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/res/drawable/action_bar_home.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
10 |
11 |
--------------------------------------------------------------------------------
/res/drawable/btn_touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/res/drawable/btn_touchpad_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/edit_text_holo_dark.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
14 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/res/drawable/icon_btn_touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/icon_btn_touchpad_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
10 |
--------------------------------------------------------------------------------
/res/drawable/scroll_all.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/scroll_horizontal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/scroll_vertical.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_1f_scroll.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
19 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_1f_tap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_2f_scroll.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
14 |
19 |
24 |
25 |
30 |
31 |
36 |
41 |
42 |
47 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_2f_tap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_3f_d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
19 |
24 |
29 |
34 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_3f_l.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
19 |
24 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_3f_lr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
19 |
24 |
25 |
30 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_3f_tap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_3f_u.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
19 |
24 |
29 |
34 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_4f_d.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
23 |
24 |
29 |
34 |
39 |
44 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_4f_lr.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
23 |
24 |
29 |
30 |
35 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_4f_u.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
23 |
24 |
29 |
34 |
39 |
44 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_4f_ud.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
18 |
23 |
24 |
29 |
34 |
39 |
44 |
45 |
50 |
55 |
60 |
65 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_drag.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
19 |
24 |
29 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_edge_b.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_edge_l.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_edge_r.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_edge_t.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_pinch_zoom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
13 |
14 |
19 |
24 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_tap.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_tap_inner_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_tap_outer_circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_touch_move.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
14 |
19 |
24 |
29 |
--------------------------------------------------------------------------------
/res/drawable/tutorial_touch_point.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
--------------------------------------------------------------------------------
/res/layout/about_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
12 |
13 |
14 |
16 |
18 |
19 |
20 |
21 |
23 |
24 |
27 |
28 |
30 |
33 |
34 |
35 |
37 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/res/layout/changelog_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
--------------------------------------------------------------------------------
/res/layout/device_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
11 |
13 |
17 |
18 |
19 |
23 |
24 |
28 |
29 |
--------------------------------------------------------------------------------
/res/layout/pairing.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
13 |
15 |
16 |
17 |
22 |
23 |
24 |
26 |
27 |
28 |
29 |
31 |
34 |
35 |
37 |
39 |
40 |
41 |
42 |
43 |
45 |
46 |
47 |
49 |
50 |
51 |
52 |
53 |
55 |
58 |
59 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/res/menu/device_context.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
--------------------------------------------------------------------------------
/res/menu/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/res/menu/touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
--------------------------------------------------------------------------------
/res/values-land/style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
18 |
25 |
32 |
35 |
38 |
--------------------------------------------------------------------------------
/res/values-land/style_touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
11 |
17 |
--------------------------------------------------------------------------------
/res/values-port/style_touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
16 |
--------------------------------------------------------------------------------
/res/values-port/style_tutorial.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
15 |
18 |
21 |
24 |
25 |
34 |
37 |
38 |
45 |
52 |
59 |
60 |
68 |
--------------------------------------------------------------------------------
/res/values-w600dp-h600dp/style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
18 |
25 |
32 |
35 |
38 |
--------------------------------------------------------------------------------
/res/values-w600dp-h600dp/style_tutorial.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
15 |
18 |
21 |
24 |
25 |
34 |
37 |
40 |
43 |
44 |
50 |
57 |
64 |
71 |
72 |
79 |
--------------------------------------------------------------------------------
/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #a0a6b3
4 | #7533b5e5
5 | #7533b5e5
6 | #3033b5e5
7 | #f3f3f3
8 | #b20099cc
9 | #b20099cc
10 | #4c33b5e5
11 |
--------------------------------------------------------------------------------
/res/values/keymaps.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | de_DE
5 | en_US
6 |
7 |
8 | Deutsch
9 | English
10 |
11 |
--------------------------------------------------------------------------------
/res/values/operating_systems.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | android
5 | ios
6 | linux
7 | osx
8 | playstation3
9 | windows
10 |
11 |
12 |
13 | @string/os_android
14 | @string/os_ios
15 | @string/os_linux
16 | @string/os_osx
17 | @string/os_playstation3
18 | @string/os_windows
19 | @string/os_undefined
20 |
21 |
--------------------------------------------------------------------------------
/res/values/pref_touchpad_buttons.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | show
5 | show_portrait
6 | hide
7 |
8 |
9 | @string/pref_touchpad_buttons_show
10 | @string/pref_touchpad_buttons_show_portrait
11 | @string/pref_touchpad_buttons_hide
12 |
13 |
--------------------------------------------------------------------------------
/res/values/pref_touchpad_gesture_mode.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | android
6 | gnome_shell
7 | osx
8 | playstation3
9 | ubuntu_unity
10 | windows7
11 | windows8
12 |
13 |
14 | @string/pref_touchpad_gesture_mode_default
15 | @string/pref_touchpad_gesture_mode_android
16 | @string/pref_touchpad_gesture_mode_gnome_shell
17 | @string/pref_touchpad_gesture_mode_osx
18 | @string/pref_touchpad_gesture_mode_playstation3
19 | @string/pref_touchpad_gesture_mode_ubuntu_unity
20 | @string/pref_touchpad_gesture_mode_windows7
21 | @string/pref_touchpad_gesture_mode_windows8
22 |
23 |
24 |
25 |
26 | gnome_shell
27 | ubuntu_unity
28 |
29 |
30 | @string/pref_touchpad_gesture_mode_default
31 | @string/pref_touchpad_gesture_mode_gnome_shell
32 | @string/pref_touchpad_gesture_mode_ubuntu_unity
33 |
34 |
35 |
36 | windows7
37 | windows8
38 |
39 |
40 | @string/pref_touchpad_gesture_mode_windows7
41 | @string/pref_touchpad_gesture_mode_windows8
42 |
43 |
--------------------------------------------------------------------------------
/res/values/style_about.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
18 |
23 |
28 |
35 |
39 |
45 |
47 |
55 |
56 |
--------------------------------------------------------------------------------
/res/values/style_changelog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
13 |
--------------------------------------------------------------------------------
/res/values/style_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
17 |
22 |
26 |
--------------------------------------------------------------------------------
/res/values/style_pairing.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
11 |
--------------------------------------------------------------------------------
/res/values/style_touchpad.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
13 |
19 |
24 |
36 |
42 |
47 |
52 |
59 |
65 |
--------------------------------------------------------------------------------
/res/xml/preferences_device.xml:
--------------------------------------------------------------------------------
1 |
3 |
10 |
16 |
23 |
30 |
36 |
39 |
42 |
45 |
46 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/ChangelogDialog.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl;
18 |
19 | import android.app.Activity;
20 | import android.app.AlertDialog;
21 | import android.app.Dialog;
22 | import android.content.Context;
23 | import android.content.DialogInterface;
24 | import android.text.Html;
25 | import android.view.LayoutInflater;
26 | import android.view.View;
27 | import android.view.ViewGroup;
28 | import android.widget.TextView;
29 |
30 | import java.io.BufferedReader;
31 | import java.io.IOException;
32 | import java.io.InputStream;
33 | import java.io.InputStreamReader;
34 |
35 | /**
36 | * Dialog that shows the app changelog.
37 | */
38 | public class ChangelogDialog {
39 |
40 | private static final String CHANGELOG_ASSETS_FILE = "CHANGELOG.md";
41 |
42 | private static final String HEADER_LINE_REGEX = "^--*$";
43 |
44 |
45 | private static CharSequence getHtmlText(Context context) {
46 | StringBuilder result = new StringBuilder();
47 |
48 | InputStream inputStream = null;
49 | InputStreamReader inputReader = null;
50 | BufferedReader reader = null;
51 | try {
52 | inputStream = context.getAssets().open(CHANGELOG_ASSETS_FILE);
53 | try {
54 | inputReader = new InputStreamReader(inputStream);
55 | reader = new BufferedReader(inputReader);
56 |
57 | String currentLine = reader.readLine();
58 | String nextLine = reader.readLine();
59 | while (nextLine != null) {
60 | result.append(parseLine(currentLine, nextLine)).append('\n');
61 |
62 | currentLine = nextLine;
63 | nextLine = reader.readLine();
64 | }
65 | result.append(parseLine(currentLine, null));
66 | } finally {
67 | if (reader != null) {
68 | reader.close();
69 | }
70 | if (inputReader != null) {
71 | inputReader.close();
72 | }
73 | inputStream.close();
74 | }
75 | } catch (IOException e) {
76 | e.printStackTrace();
77 | }
78 |
79 | return Html.fromHtml(result.toString());
80 | }
81 |
82 | private static String parseLine(String currentLine, String nextLine) {
83 | if ((nextLine != null) && nextLine.matches(HEADER_LINE_REGEX)) {
84 | return String.format("
%s
", currentLine);
85 | } else if (currentLine.matches(HEADER_LINE_REGEX)) {
86 | return "";
87 | } else if (currentLine.startsWith("*")) {
88 | return String.format("\u2022%s ", currentLine.substring(1));
89 | } else {
90 | return String.format("%s ", currentLine);
91 | }
92 | }
93 |
94 | public static Dialog createDialog(Activity activity) {
95 | LayoutInflater inflater =
96 | (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
97 |
98 | View layout = inflater.inflate(R.layout.changelog_dialog,
99 | (ViewGroup)activity.findViewById(R.id.view_changelog));
100 |
101 | TextView changelogText = (TextView)layout.findViewById(R.id.changelog_text);
102 | changelogText.setText(getHtmlText(activity));
103 |
104 | return new AlertDialog.Builder(activity)
105 | .setTitle(R.string.changelog)
106 | .setView(layout)
107 | .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
108 | public void onClick(DialogInterface dialog, int id) {
109 | dialog.cancel();
110 | }
111 | })
112 | .create();
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/IntArrayList.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl;
18 |
19 | import java.util.ArrayList;
20 | import java.util.Collection;
21 |
22 | /**
23 | * Simple ArrayList for Integer values.
24 | */
25 | public class IntArrayList extends ArrayList {
26 |
27 | private static final long serialVersionUID = 7717710388705440454L;
28 |
29 |
30 | public IntArrayList() {
31 | super();
32 | }
33 |
34 | public IntArrayList(Collection extends Integer> collection) {
35 | super(collection);
36 | }
37 |
38 | public IntArrayList(int capacity) {
39 | super(capacity);
40 | }
41 |
42 |
43 | public int getValue(int index) {
44 | return (int)get(index);
45 | }
46 |
47 | public int indexOfValue(int value) {
48 | return indexOf((Integer)value);
49 | }
50 |
51 | public boolean containsValue(int value) {
52 | return contains((Integer)value);
53 | }
54 |
55 | public boolean addValue(int value) {
56 | return add((Integer)value);
57 | }
58 |
59 | public boolean removeValue(int value) {
60 | return remove((Integer)value);
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/OnMouseButtonClickListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl;
18 |
19 | /**
20 | * Interface definition for a callback to be invoked when a Mouse button is clicked.
21 | */
22 | public interface OnMouseButtonClickListener {
23 |
24 | /**
25 | * Called when a Mouse button is clicked.
26 | * @param clickType
27 | * Specifies how the button is clicked ('CLICK_TYPE_*' constants in the HidMouse class)
28 | * @param button
29 | * The clicked button
30 | */
31 | public abstract void onMouseButtonClick(int clickType, int button);
32 | }
33 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/PairedDevice.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl;
18 |
19 | import android.bluetooth.BluetoothDevice;
20 |
21 | import java.util.Comparator;
22 |
23 | /**
24 | * Container class for a paired Bluetooth device.
25 | */
26 | public class PairedDevice {
27 |
28 | /** Default Comparator for the PairedDevice class. */
29 | public static Comparator DefaultComparator = new Comparator() {
30 | @Override
31 | public int compare(PairedDevice d1, PairedDevice d2) {
32 | return d1.toString().compareToIgnoreCase(d2.toString());
33 | }
34 | };
35 |
36 |
37 | private BluetoothDevice mDevice;
38 | private String mName;
39 |
40 |
41 | public PairedDevice(BluetoothDevice device, String name) {
42 | mDevice = device;
43 | mName = name;
44 | }
45 |
46 |
47 | @Override
48 | public String toString() {
49 | return mName;
50 | }
51 |
52 | public BluetoothDevice getDevice() {
53 | return mDevice;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/widget/OnKeyboardComposingTextListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl.widget;
18 |
19 | /**
20 | * Interface definition for a callback to be invoked when a keyboard is composing a text.
21 | */
22 | public interface OnKeyboardComposingTextListener {
23 |
24 | /**
25 | * Called when a keyboard is composing a text.
26 | * @param composingText
27 | * The composing text of the keyboard.
28 | */
29 | public abstract void OnKeyboardComposingText(CharSequence composingText);
30 | }
31 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/widget/OnScrollModeChangedListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl.widget;
18 |
19 | /**
20 | * Interface definition for a callback to be invoked when the scroll mode has changed.
21 | */
22 | public interface OnScrollModeChangedListener {
23 |
24 | /**
25 | * Called when the scroll mode has changed.
26 | * @param newMode
27 | * The new mode ('SCROLL_MODE_*' constants in the {@link TouchpadView} class)
28 | * @param oldMode
29 | * The old mode ('SCROLL_MODE_*' constants in the {@link TouchpadView} class)
30 | */
31 | public abstract void onScrollModeChanged(int newMode, int oldMode);
32 | }
33 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/widget/OnSendComposeTextListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl.widget;
18 |
19 | /**
20 | * Interface definition for a callback to be invoked when a composed text should be sent.
21 | */
22 | public interface OnSendComposeTextListener {
23 |
24 | /**
25 | * Called when a composed text should be sent.
26 | * @param text
27 | * The composed text that should be sent.
28 | */
29 | public abstract void OnSendComposeText(CharSequence text);
30 | }
31 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/widget/OnTouchpadGestureListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl.widget;
18 |
19 | /**
20 | * Interface definition for a callback to be invoked when a touchpad gesture has been detected.
21 | */
22 | public interface OnTouchpadGestureListener {
23 |
24 | /**
25 | * Called when a touchpad gesture has been detected.
26 | * @param gesture
27 | * The detected gesture ('GESTURE_*' constants in the {@link TouchpadView} class)
28 | * @param direction
29 | * The direction of the gesture ('GESTURE_DIRECTION_*' constants in the {@link TouchpadView}
30 | * class)
31 | * @return
32 | * Return {@code true} if you have handled the gesture, {@code false} if you haven't
33 | */
34 | public abstract boolean onTouchpadGesture(int gesture, int direction);
35 | }
36 |
--------------------------------------------------------------------------------
/src/org/ronsdev/bluectrl/widget/SummaryListPreference.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2012
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package org.ronsdev.bluectrl.widget;
18 |
19 | import android.content.Context;
20 | import android.preference.ListPreference;
21 | import android.util.AttributeSet;
22 |
23 | /**
24 | * A {@link Preference} that displays a list of entries as a dialog.
25 | *
26 | * This extended version can show the current value in the summary (backported feature of
27 | * Android 4).
28 | */
29 | public class SummaryListPreference extends ListPreference {
30 |
31 | public SummaryListPreference(Context context, AttributeSet attrs) {
32 | super(context, attrs);
33 | }
34 |
35 | @Override
36 | public CharSequence getSummary() {
37 | final CharSequence summary = super.getSummary();
38 | final CharSequence entry = getEntry();
39 | if (summary == null || entry == null) {
40 | return null;
41 | } else {
42 | return String.format(summary.toString(), entry);
43 | }
44 | }
45 |
46 | @Override
47 | public void setValue(String value)
48 | {
49 | super.setValue(value);
50 | notifyChanged();
51 | }
52 | }
--------------------------------------------------------------------------------