==== Application launching with GPIO trigger on Android ====
** You must install the Android release V2.9(C2)/V4.5(XU4) or higher to launch app via GPIO. ** \\
** In that case you can skip step 1 ~ 7 for your easier life LOL** \\
** If you installed higher version of the Android Marshmallow version v2.9, Please do just step 3 and 4, and skip to 7 ** \\
** Please check the revision of PCB. This page is based on the board revision 0.2.(C2) **
This page explains how to launch an app via GPIO input. \\ All of software stuff(Step 1 to 7) was included from Android image Ver2.9 to Ver3.4 and Marshmallow Ver2.4 released.\\
\\
**1. Enable the GPIO key driver as a built-in.**\\
...
CONFIG_KEYBOARD_GPIO_POLLED=y
...
**2. Add gpio key mapping to device tree blob.** \\
\\
** ODROID-C2 **\\
(path: arch/arm64/boot/dts/meson64_odroidc2.dts) \\
[[en:c2_hardwareexpansion_connectors|GPIO Pin description]] \\
[[https://github.com/hardkernel/linux/commit/6c5f6929b5f351d54929b6ba3921db7d48115a4f|commit]]
gpio_keys_polled {
status = "disabled";
compatible =
"gpio-keys-polled";
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <100>;
autorepeat;
button@1 {
label = "GPIO Key F7";
linux,code = <65>;
gpios = <&gpio GPIOX_19 1>;
};
button@2 {
label = "GPIO Key F8";
linux,code = <66>;
gpios = <&gpio GPIOX_11 1>;
};
button@3 {
label = "GPIO Key F9";
linux,code = <67>;
gpios = <&gpio GPIOX_9 1>;
};
button@4 {
label = "GPIO Key F10";
linux,code = <68>;
gpios = <&gpio GPIOX_7 1>;
};
};
\\
** ODROID-XU3/XU4 **\\
(path: arch/arm/boot/dts/exynos5422-odroidxu3.dts) \\
[[en:xu3_hardware#expansion_connectors|GPIO Pin description]] \\
[[en:xu4_shift_shield#gpio_map_for_wiringpi_library|Shift shield GPIO map]]\\
[[https://github.com/hardkernel/linux/commit/d7bdd20604db04c462ba4ffe77168402da3afe90|commit1]]\\
[[https://github.com/hardkernel/linux/commit/e8b0d4d2f9be82c711343ee391d576bf7b677c91|commit2]]
gpio_keys_polled {
status = "disabled";
compatible =
"gpio-keys-polled";
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <100>;
autorepeat;
button@1 {
label = "GPIO Key F7";
linux,code = <65>;
gpios = <&gpx1 2 0xf>;
};
button@2 {
label = "GPIO Key F8";
linux,code = <66>;
gpios = <&gpx1 5 0xf>;
};
button@3 {
label = "GPIO Key F9";
linux,code = <67>;
gpios = <&gpx1 6 0xf>;
};
button@4 {
label = "GPIO Key F10";
linux,code = <68>;
gpios = <&gpx1 3 0xf>;
};
};
**3. Enable GPIO Key map.** \\
gpio_keys_polled {
status = "okay";
.
.
};
**4. Build the kernel source. and flash the kernel image to the board.(C2)** \\
$ cd kernel
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-gnu-
$ make odroidc2_i2c_defconfig #(or make odroidc2_defconfig)
$ make -j8
$ adb reboot fastboot
$ fastboot flash dtb arch/arm64/boot/dts/meson64_odroidc2.dtb
$ fastboot flash boot arch/arm64/boot/uImage
$ fastboot reboot
**5. Add key event keycode to system/usr/keylayout/Vendor_0001_Product_0001.kl file.** \\ You can find keycode table from [[http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlkeycodes.html|reference]] \\
** ODROID-C2 **\\
[[https://github.com/codewalkerster/android_device_hardkernel_odroidc2/commit/7b49c29162c884491df262a3ec3d96f08942e231|commit]] \\
** ODROID-XU3/XU4 **\\
[[https://github.com/codewalkerster/android_device_hardkernel_odroidxu3/commit/58c5a25a219f3f4e770a52fefd50b2fd05cff510|commit]] \\
\\
...
key 65 F7
key 66 F8
key 67 F9
key 68 F10
...
**6. Apply the patch that intercept key event to frameworks/base & ODROID Utility App.** \\
** ODROID-C2 **\\
[[https://github.com/codewalkerster/android_frameworks_base/commit/6fe6d88e6715e16d891b046a41f7d7fa2588d48c|frameworks/base commit]] \\
[[https://github.com/codewalkerster/android_packages_apps_Utility/commit/87f87154c09eee8eb48106512346744da9b37c3b|ODROID Utility commit]]\\
** ODROID-XU3/XU4 **\\
[[https://github.com/codewalkerster/android_frameworks_base/commit/c8f8974e657f9cc4471a3825fed8bd15718f556d|frameworks/base commit]] \\
[[https://github.com/codewalkerster/android_packages_apps_Utility/commit/f33e6124571df1e201167589ecccb3b218bc3c0f|ODROID Utility commit]]\\
**7. Build the Android image and flash it.** \\
[[en:c2_building_android#build|ODROID-C2 build method]]
[[en:xu3_building_android#installation|ODROID-XU3/4 install method]]
$ cd
$ cd out/target/product/odroidc2/
$ adb reboot fastboot
$ fastboot flash system rootsystem.img
$ fastboot reboot
\\
\\
**8. Connect a few buttons to the GPIOs with 10KOhm pull-up resistors. ** **Click images to enlarge it.** \\
** ODROID-C2 **\\
{{:en:img_20170104_170948.jpg?direct&500|}}
{{:en:gpio_shortcut_bb.png?direct&300|}}
{{:en:gpio_shortcut_schem.png?direct&300|}}
** ODROID-XU3/XU4 **\\
{{:en:gpio_shortcut_xu4_bb.png?direct&300|}}
{{:en:gpio_shortcut_xu4_schem.png?direct&300|}}
**9. Set the launch app by using ODROID Utility app.**
{{:en:screen.png?direct&500|}}
{{youtube>tU6-Fz6twAM}}