doc:appunti:android:bluetooth_keboard
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
doc:appunti:android:bluetooth_keboard [2020/01/31 15:26] – [Using OsmAnd with a Remote Controller] niccolo | doc:appunti:android:bluetooth_keboard [2020/02/04 10:36] – [Using OsmAnd with a Remote Controller] niccolo | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Using OsmAnd with a Remote Controller ====== | ====== Using OsmAnd with a Remote Controller ====== | ||
- | I'm an early joiner of the **OpenStreetMap** project, so I'm a big fan of the **OsmAnd** app. It is my preferred choice for **motorbike on-board navigation**. | + | [{{.: |
+ | I'm an early joiner of the **[[https:// | ||
- | A long-standing issue was the impossiblity to operate the map while **wearing gloves**. To be clear: panning and zooming on the Android touchscreen is impossibile. Here we explore the possibility to use a little Bluetooth remote controller to get at least the **basic pan/zoom functions**; | + | A long-standing issue was the impossiblity to operate the map while **wearing gloves**. To be clear: panning and zooming on the Android touchscreen |
- | [{{.: | + | ===== The Mocute |
- | In OsmAnd you have to enable: Hamburger menu => **Configure profile** => General settings => **External input devices** => **Keyboard**. | + | [{{ .:osmadn: |
+ | It is a low-cost (5-10 euros) | ||
| {{: | | {{: | ||
| {{: | | {{: | ||
- | ===== The Mocute Universal Wireless Remote Controller ===== | ||
- | |||
- | It is a low-cost (5-10 euros) **Bluetooth** device. It has an internal **rechargeable battery** which should last about 10 hours. the small size is quite convenient for using it on the **handlebar** of a motorbike, the biggest problem being to be **not water-proof**. | ||
Once paired with the Android device, you can get some information using **cat / | Once paired with the Android device, you can get some information using **cat / | ||
Line 37: | Line 36: | ||
Generally speaking, an Android input device generates a different hardware **ScanCode** when you press each different key. Using an appropriate **keylayout file**, each ScanCode is translated into an **Android KeyCode**, which is sent to the application. For example: the Mocute controller generates the **ScanCode 114** when you press the **A button**, looking at **/ | Generally speaking, an Android input device generates a different hardware **ScanCode** when you press each different key. Using an appropriate **keylayout file**, each ScanCode is translated into an **Android KeyCode**, which is sent to the application. For example: the Mocute controller generates the **ScanCode 114** when you press the **A button**, looking at **/ | ||
- | ===== Default key mapping | + | ===== Android Key Layouts |
- | The Mocute-032 controller has a little slide switch with two positions: **GAME** and **KEY**. Each mode generates different **ScanCodes** for the four buttons. | + | Many key layouts exists into an Android device, they are stored into the **/ |
+ | |||
+ | < | ||
+ | ... | ||
+ | key 10 9 | ||
+ | key 11 0 | ||
+ | key 12 MINUS | ||
+ | key 13 EQUALS | ||
+ | key 14 DEL | ||
+ | key 15 TAB | ||
+ | key 16 Q | ||
+ | key 17 W | ||
+ | key 18 E | ||
+ | ... | ||
+ | key 113 | ||
+ | key 114 | ||
+ | key 115 | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ===== Mocute default key mapping ===== | ||
+ | |||
+ | The Mocute-032 controller has a little slide switch with two positions: **GAME** and **KEY**. Each mode generates different **ScanCodes** for the four buttons. **The joystick operates differently**: | ||
[{{.: | [{{.: | ||
Line 45: | Line 66: | ||
==== The joystick in GAME mode ==== | ==== The joystick in GAME mode ==== | ||
- | In **GAME mode**, each **axis position** is reported as a **floating point number** ragining from **-1.0** to **1.0**, where the **zero** is at the **central position**. When the joystick is pushed near to one side, an **Android KeyCode** is generated. This means that beside the axes position, an appropriate KEYCODE_DPAD_UP, | + | In **GAME mode**, each **axis position** is reported as a **floating point number** ragining from **-1.0** to **1.0**, where the **zero** is at the **central position**. When the joystick is pushed near to one side, an **Android KeyCode** is generated. This means that beside the axes position, an appropriate KEYCODE_DPAD_UP, |
You can see **joystick axes values** with apps like **[[https:// | You can see **joystick axes values** with apps like **[[https:// | ||
Line 60: | Line 81: | ||
^ Y | 158 | 4 | KEYCODE_BACK | ^ Y | 158 | 4 | KEYCODE_BACK | ||
- | ===== Key Layout | + | ===== Connecting the external input device to OsmAnd |
- | Many key layouts exists into an Android device, they are stored into the **/ | + | **OsmAnd 3.5.5** supports some external input devices, to use the Mocute controller we need to enable the generic keyboard external input device; from the Menu button => **Configure profile** => General settings => **External input devices** => **Keyboard**. |
- | < | + | At the moment |
- | ... | + | |
- | key 10 9 | + | |
- | key 11 0 | + | |
- | key 12 MINUS | + | |
- | key 13 EQUALS | + | |
- | key 14 DEL | + | |
- | key 15 TAB | + | |
- | key 16 Q | + | |
- | key 17 W | + | |
- | key 18 E | + | |
- | ... | + | |
- | key 113 | + | |
- | key 114 | + | |
- | key 115 | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | **OsmAnd 3.5.5** supports some external input devices, to use the Mocute controller we need to enable the **keyboard external input device**. | + | |
- | ^ OsmAnd | + | ^ Android KeyCode |
- | ^ KEYCODE_DPAD_RIGHT | Scroll right | | + | | KEYCODE_DPAD_RIGHT | Scroll right |
- | ^ KEYCODE_DPAD_LEFT | + | | KEYCODE_DPAD_LEFT |
- | ^ KEYCODE_DPAD_UP | + | | KEYCODE_DPAD_UP |
- | ^ KEYCODE_DPAD_DOWN | + | | KEYCODE_DPAD_DOWN |
- | ^ KEYCODE_PLUS | + | | KEYCODE_PLUS |
- | ^ KEYCODE_MINUS | + | | KEYCODE_MINUS |
===== Remapping the controller keys (root required) ===== | ===== Remapping the controller keys (root required) ===== | ||
Line 99: | Line 102: | ||
- Associate the **X** button to **zoom in**, and **Y** button to **zoom out**. | - Associate the **X** button to **zoom in**, and **Y** button to **zoom out**. | ||
- | In theory - to remap the functions of our controller - it should be possible to provide a **specific keylayout file** for just this controller, just giving it the name **Vendor_ffff_Product_0000.kl** (see the vendor and product read from the ''/ | + | In theory - to remap the functions of our controller - it should be possible to provide a **specific keylayout file** for just this controller: Android' |
So we have to change the **Generic.kl** file, redefining some ScanCodes and axis (the rest of the file must remain untouched): | So we have to change the **Generic.kl** file, redefining some ScanCodes and axis (the rest of the file must remain untouched): | ||
Line 110: | Line 113: | ||
</ | </ | ||
+ | This change have the side effect to remap all the external keyboards that we will connect to our Android device! | ||
===== Key Mapping Test ===== | ===== Key Mapping Test ===== | ||
Using the **[[https:// | Using the **[[https:// | ||
- | Using the **[[https:// | + | Using the **[[https:// |
Using the **[[https:// | Using the **[[https:// | ||
+ | |||
+ | ===== Other remote controllers ===== | ||
+ | |||
+ | * **[[https:// | ||
+ | * **[[https:// | ||
===== Web References ===== | ===== Web References ===== |