==== 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_hardware&#expansion_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}}