wiki:Android

Android

Gateworks provides an Android Board Support Package for the Ventana Product family. Android is a popular Operating System, developed by Google and based on a Linux kernel.

Gateworks Android BSP is based on Android Open Source Project (AOSP) code, with Freescale patches applied (some proprietary and not open-source), with some extra Gateworks patches on top specific to Ventana boards.

The following Ventana hardware is currently supported:

  • GW551x/GW552x/GW553x/GW54xx/GW53xx/GW52xx/GW51xx
  • LVDS Touchscreen / Backlight / Display (Freescale LVDS1 aka MCIMX-LVDS1 - see here for details)
  • HDMI Display
  • Analog Video Input (camera)
  • Analog Audio Input (sound recording)
  • Analog Audio Output (used when using LVDS video output)
  • HID Mouse / Keyboard input
  • Boot Devices: NAND (2GB required), micro-SD, USB Mass Storage (EHCI/OTG), mSATA

Gateworks has BSP's for the following versions of Android:

  • Lollipop (Android 5.1.1)
  • KitKat (Android 4.4.3)
  • JellyBean-MR2 (Android 4.3)

The following is a hardware compatibility matrix:

Device JellyBean-MR2 (4.3) KitKat (4.4.3) Lollipop (5.1.1) Notes
Memory size 512M 512M 512M 1GB+ ram recommended
GW551x No Yes Yes
GW552x No Yes Yes
GW553x No Yes Yes (IMU not yet supported)
GW54xx Yes Yes Yes (HDMI/LVDS output only - no CVBS)
GW53xx Yes Yes Yes
GW52xx Yes Yes Yes
GW51xx Yes Yes Yes
PCIe Yes Yes Yes
LVDS touchscreen Yes Yes Yes see here
HDMI out Yes Yes Yes
HID Mouse / Kbd Yes Yes Yes
Analog Video In Yes Yes Yes (front Camera) see #camera
Analog Audio In / Out Yes Yes Yes
GPS (on board Wi2Wi) Yes Yes Yes see here
External Storage Yes Yes Yes USB / micro-SD / SATA / NAND
Ethernet Yes Yes Yes see here
Wifi (client mode) Yes Yes Yes see here
accelerometer Yes Yes Yes see here
magnetometer Yes Yes Yes see here
boot from micro-SD Yes Yes Yes
boot from USB Yes Yes Yes
boot from mSATA Yes Yes Yes
boot from NAND No Yes Yes (requires 2GB NAND)
Over-The-Air (OTA) update No No Yes see here

Building Android Source Code

Android Pre-Compiled Software

Booting Android

Android Development Notes

Development Resources:

Android GW11036 Development Kit

Display Output

The Gateworks Android BSP's support HDMI and LVDS output. An HDMI connection will be auto-detected on bootup by the Android boot script but will default to 1080p resolution. If you need to specify 720p or 480p you can set the bootloader hdmi env variable to 720p or 480p or manually set the video parameter for more specific control. Note that Analog Video (CVBS) output available on the GW54xx is not supported.

The ability to mirror two displays is also available in the Gateworks Android BSP. The steps for duplication of displays as well as setting the outputs of individual displays is further documented on the Android/Booting wiki page.

Display Orientation and Screen Rotation

Android supports dynamic screen rotation based on orientation information obtained from an orientation sensor (accelerometer). This information can typically be used to change the orientation of the display in 90degree increments so that if you flip your tablet around for example, the display rotates.

The enable/disable switch for 'Screen Rotation' lives in the Settings application under Accessibility and by default it is enabled, however the configuration switch will not be present unless the device supports the following:

  • PackageManager.FEATURE_SENSOR_ACCELEROMETER (android.hardware.sensor.accelerometer.xml)
  • PackageManager.FEATURE_SCREEN_PORTRAIT (android.hardware.screen.portrait.xml)
  • PackageManager.FEATURE_SCREEN_LANDSCAPE (android.hardware.screen.landscape.xml)

The xml files for the above features come from frameworks/native/data/etc and are typically copied into the appropriate location of /system/etc/permissions by PRODUCT_COPY_FILES directives in your board config file (ventana.mk and imx6.mk for the Gateworks Android BSPs).

Display rotation will still occur even if FEATURE_SCREEN_PORTRAIT and FEATURE_SCREEN_LANDSCAPE do not exist, but the control to enable/disable rotation will not exist.

The orientation of the board with respect to the display can be typically configured for the accelerometer either in the kernel device-tree or by writing to the input device via sysfs. The Gateworks BSP's do this in the Android init script.

Networking

Wired Ethernet Networking

Android does support Ethernet interfaces, but lacks the UI to select which interface to use if multiple are available.

By default the eth0 Network Interface is automatically configured via DHCP.

See Android/OSDevelopment for details on how to change this.

Wireless Networking

Android isn't designed to support a random variety of hardware, therefore supporting 'XYZ' radio device may involve customization.

The Gateworks Android BSP kernel is built with the following wireless device support by default (defined in kernel_imx/arch/arm/configs/gwventana_android_config):

  • ath5k (PCI 802.11a/b/g)
  • ath9k (PCIe 802.11n)

See Android WiFi for more info

Cellular Modem Networking

Modem support in Android is less than other operating systems.

Freescale has added support for one modem ( HUAWEI EM770W ). Gateworks has not tested this.

Please read more in the Freescale Release documents that apply to the release being used:

Modem configuration:

Android Bluetooth

The Bluetooth software stack used by the standard Android OS was BlueZ prior to Android 4.2 (Jelly Bean MR2) but then changed to Bluedroid. It is unknown exactly why Google made this change but it is suspected it merely had to do with licensing (BlueZ is GPLv2 and Bluedroid is Apache2 which fits better with Android).

Because the BlueZ stack is used in standard Linux distros and supports additional features that are not supported by Bluedroid we use it in our Gateworks Android BSP's.

The Android Bluetooth HAL has a fairly standard API (since 4.2) between it and the bluetooth stack which is documented fairly well by the BlueZ android project here

Gateworks standard products do not have on-board bluetooth host controllers however these are available and supported in various peripherals that can be added:

  • Bluetooth HCI's supported by the Linux btusb driver:
    • USB Bluetooth dongles can be found starting at around $4
    • many miniPCIe form-factor Wireless 'combo' cards exist which have a USB based Bluetooth HCI such as the GW17022 DHXA-225

Profile Support

The Android OS supports a variety of Bluetooth profiles:

  • Human Interface Device Profile (HID)
  • Personal Area Networking Profile (PAN)
  • Hands-Free Profile (HFP)
  • Advanced Audio Distribution Profile (A2DP)
  • Health Device Profile (HDP)
  • Audio/Video Remote Control Profile (AVRCP)
  • Generic Attribute Profile (GATT)

In addition the following profiles are supported in client mode in Android Lollipop and above:

  • Hands-Free Profile (HFP) Client
  • Message Access Profile (MAP) Client
  • Audio/Video Remote Control Profile (AVRCP) Client
  • Advanced Audio Distribution Profile (A2DP) Client (sink)

Device Pairing

With standard Bluetooth a device needs to be paired before it can be connected to. Note that Bluetooth Low Energy (BLE) devices do not require pairing. The Android OS provides a Bluetooth Activity within the Settings application which is easily accessible by either:

  • Using the Bluetooth Quick Settings icon in the notification pull-down menu
  • Choosing the 'Bluetooth' section under the Settings App 'Wireless & networks' section
  • Some applications will take you directly to this activity

The Bluetooth settings activity has a enable/disable slide control and will upon entering the activity kick off a scan request which will list all available devices in the vicinity that are in scan mode. Additionally it will show all paired devices and their state (connected vs not connected). A device must be paired with before you can connect to it and until you connect to it it won't be used (even if its paired). Note that the activity does not continually scan in the background, but you can select 'Refresh' from the overflow menu to kick off another scan. When scanning there will be a spinner shown to the right of the 'Available devices' menu. Regardless of a background scan being in progress, the 'Paired Device' list will always dynamically update its status as far as devices that are connected or not.

Device Connecting

A standard bluetooth device must be paired before you can connect to it and you must connect to it before it can be used by the Android OS. Note that Bluetooth Low Energy (BLE) devices do not require pairing to be used.

Once connected a device will stay connected until being told to disconnect (by hitting the 'X' next to it in the Bluetooth activity (see above) or until it goes out of range or is powered off. If previously connected to, Android will attempt to re-connect to a device in the background when it is able to be seen (ie a device powered on from an off state, or a device that has come into range).

Android NFC

The Android OS has had NFC support since Android 4.0 Ice Cream Sandwich which also debuted the 'Android Beam' functionality. Starting with Android 5.0 Lollipop Android supports the NCI specification making hardware interoperability a bit easier. A Hardware Abstraction Layer exists to allow relaying the NCI protocol to the OS driver/hardware layer.

Gateworks standard products do not have on-board NFC controllers however an add-in NCI controller would take little effort to support via a HAL layer.

Using NFC on Android does not require any special software. The following are common use cases:

  • TAG Reading - approach an NFC tag with and NFC enabled Android device and a TAG read intent will fire
  • Android Beam - approach an Android NFC enabled device with another and both devices will present a button that will beam the current screen information to the other. What is transferred depends on the app/content and typically is:
    • launch the URL shown
    • transfer the contact information shown
    • transfer the image shown

Reference:

GPS

The Wi2Wi W2SG0008i on-board GPS module available as an option on Ventana boards is supported by the Android BSP.

Example Apps:

References:

Sensors

The Gateworks Ventana GW54xx/GW53xx/GW52xx boards have a Freescale FXOS8700 3-axis accelerometer/3-axis magnetometer sensor which is supported under the Gateworks Android BSP. This combination of sensors can provide you with:

  • orientation: portrait/landscape detection, tap detect, fall detect
  • pedometry, vibration analysis, and activity monitoring
  • eCompass: device orientation and magnetic heading
  • virtual gyro (in a magnetically clean/stable environment)

The GW553x board has a LSM9DS1 9-DOF inertial module (3-axis accelerometer/3-axis magnetometer/3-axis gyro) which is supported under the Gateworks Android BSP. This combination of sensors can provide you with:

  • orientation: portrait/landscape detection, tap detect, fall detect
  • pedometry, vibration analysis, and activity monitoring
  • eCompass: device orientation and magnetic heading
  • gyro (in a magnetically clean/stable environment)

Note that while Android defines an 'orientation sensor' it has been deprecated in Android 2.2. Some apps however have not moved on to using the accelerometer/magnetometer for orientation.

Example apps:

  • clinometer - a clinomometer (slope finder) and bubble level
  • elixir-2 - a set of tools with a nice sensor monitoring app

References:

Analog Video Input for Camera

The Gateworks Android BSP's support Analog video capture via the ADV7180 CVBS video decoder.

The HDMI video input receiver is not supported at this time.

Over-The-Air Updates

Android has support for Over-The-Air software updates built-in. Gateworks has augmented this to improve it in several areas:

  • single ota image for multiple boot devices (NAND/ubi or blockdev)
  • add filesystem support used by Ventana Android BSP
  • update Ventana bootloader/SPL

See Android/Updates for more details

Developer Tools

Developers can get started quickly by purchasing a USB Stick Pre-Loaded with Android on the Gateworks Online Shop

For Windows Developers (WinCE, Wec7), C# and .NET can be used for development, including but not limited to Xamarin.Android.

Android pairs great with Eclipse as an IDE.

It features a Full Java IDE, a Graphical UI Builder, and on device debugging options.

Please see the following link for more information: http://developer.android.com/tools/index.html

There are many other options around the net, including a Visual Studio option vs-android: Developing for Android in Visual Studio

Android Apps

Below are some apps. Apps can be found on many marketplaces or as APK's. Please note, Gateworks does not license is in no way affiliated with the companies or has tested any of these apps.

Sideloading Applications

Devices that are Android compatible may seek to license the Google Play client software. This allows them to become part of the Android app ecosystem, by allowing users to download developers' apps from a catalog shared by all compatible devices. This option isn't available to devices that aren't compatible. The process to achieve Google Android Compatibility is up to the end-user product as the Gateworks baseboards themselves are not a finished product until radios, modems, etc are added by the end user.

In order to install apps outside of the Google Android ecosystem (aka Google Play App Store) you will need to side-load apps or install an alternative marketplace. You will need to enable 'Unknown sources' in the 'Security' tab of the Settings application to load apk's. Once you do this you have a few options such as (to name a few):

Extended Multimedia functionality (not available in standard Gateworks BSP)

Freescale offers additional packages to extend Android KitKat (4.4) and Lollipop (5.0) functionality avaialble to approved customers.

  • Extended Multimedia Feature Package (additional codecs)
    • local playback
    • enhanced codecs, demultiplexer, and file formats: MOV, AVI, ASF, FLV, MPEG-PS, MPEG-TS
    • trick mode playback
    • multiple audio track selection
    • recording
    • stream playback: HTTP, RTSP, HTTPLive, RTP, UDP
    • subtitle support
  • Wi-Fi Display Sink Feature Package (Miracast support)
    • the source provided is for a Realtek 8723AS WiFi SDIO card but the design of this feature allows porting to any WiFi hardware module

Some additional 'License limited codecs' can be obtained from Freescale as well which include:

  • fsl_ac3_dec.tar.gz - AC3 Audio decodec
  • fsl_ddp_dec.tar.gz - DD Plus Audio decoder
  • fsl_ms_codec.tar.gz - ASF Demuxer, WMV Video decoder, WMA Audio decoder (Microsoft)
  • fsl_real_dec.tar.gz - RM Demuxer, VPU Video decoder, RA Audio decoder (Real)

Notes:

  • source code package provided as-is with no support and made available to approved customers via an extranet site
  • customer will have options to purchase support or customization services from Freescale if needed
  • for more info contact L2manager-android@…

Extended Multimedia Feature Package Installation instructions

To install the Freescale extended codec package you need the following:

  • a build of the Gateworks Android BSP
  • the tarball obtained from Freescale via an e-mail request to L2manager-android@… appropriate for the version of Android you are building (ie android_L5.1.1_2.1.0-ga_omxplayer_source.tar.gz)

Proceedure:

  1. untar the tarball in your Android build directory:
    untar android_L5.1.1_2.1.0-ga_omxplayer_source.tar.gz
    
    • this will extract the following:
      • device/fsl-codec/ - pre-built core codecs
      • external/fsl_imx_omx/ - integration into OpenMAX/stagefright via OpenMAXIL
      • switch_build_to.sh - script for switching between full and core install
      • clean_obj_before_building.sh -
  2. execute scripts to configure, clean, and make:
    source build/envsetup.sh
    lunch ventana-user # select build variant
    ./switch_build_to.sh full
    ./clean_obj_before_building.sh
    make
    

There are two methods of inclusion:

  • core - includes pre-built core codecs via shared-object libraries on filesystem only
    • uses device/fsl-codec (HAVE_FSL_IMX_CODEC = false)

device/fsl-codec/fsl-codec.mk)

  • full - integrates new codecs and functionality into OpenMAX/stagefright via OpenMAXIL
    • uses external/fsl_imx_omx (HAVE_FSL_IMX_CODEC = true)
    • includes the CactusPlayer? app (built from provided source) that takes advantage of some of the features

You can later remove the Freescale extended codec package by removing the two directories and scripts it installs into your build directory:

rm -rf device/fsl-codec external/fsl_imx_omx switch_build_to.sh clean_obj_before_building.sh
Last modified 4 days ago Last modified on 05/19/17 09:46:08

Attachments (4)

Download all attachments as: .zip