Friday 23 November 2012

Nexus 4 + SlimPort HDMI = AWESOME but no OTG

A small entry for the blog about Google Nexus 4.
Nexus 4 USB OTG feature seems disabled by firmware (I think kernel modules), but its SlimPort HDMI works so far using this small adapter found on Amazon.

More on USB OTG is detailed on this issue report on Google Android project page. Google decided to change manual pages, changing the keyboard and mouse USB OTG support to Bluetooth ones. This wasn't the case few weeks ago (here it is the screenshot). Cause has been spotted on Gerrit code review (Mako cannot supply 5V). No confirmation by Google on this almost 600-stars issue.

Android 4.2 sets and locks the UI in landscape mode (exactly like Nexus 7).
No audio transport so far - at least with my monitor - an ASUS VH232H (has built-in speakers). Hope it will implemented in future Android updates.

Just for info, the main differences between MHL (seen on SGS SII, SIII, Note, Note II) are:
  • You don't have to plug the adapter into a charger. The option is there (if you want to charge the phone) but you can also use it without an adapter.
  • Slimport will have VGA, DVI, and DisplayPort adapters as well. Slimport to VGA will be useful for connecting to projectors.
  • Slimport supports higher resolutions, 60 fps, 3D, etc. Basically it's more future-proof.
  • Royalty-free. MHL still requires royalties to Silicon Image, like HDMI, while Slimport is DisplayPort, and royalty-free. The royalties are small, but they're there, and somebody has to pay for them!
More from Engadget.
Feel free to ask for screenshots, photos or informations.

Tuesday 18 September 2012

Rikomagic MK802 II as Smart TV


  • Rikomagic MK802 II ~75€
  • Microsoft VX 800 ~12€
  • USB Audio Adapter ~5€
  • USB Hub (Powered via power supply) ~7€
  • Wireless Keyboard (e.g. Logitech K400) ~25€


Android settings

  • Animation 0.5x
  • Force GPU
  • Choose Null Keyboard as Input method
  • Change language to the preferred one
  • Set video to 720p@60Hz (1080p works, but it is too much for the hardware)


  • USB AUDIO Card Status
    • Works, I need to check if output device is set back to AUDIO_CODEC in Skype or Google Talk
  • Webcam Video Status
    • Video works on most apps
    • Device is properly detected by the kernel as UVC compliant camera
    • Skype/Google Hangout: it doesn't handle the output video stream correclty, so when video calling the receiver will have a greenish video
      • Can be related to sync frequency of webcam (50 or 60Hz), or endianess of library
  • Webcam Audio Status
      • Developers hardcoded some changes in their messy way to handle audio: if you change the order/numbering of device some stuff will not work
    • Device is properly detected by the kernel as UVC compliant camera, exposing an additional audio card interface having a single capture endpoint
    • Seems MK802 II firmware is using alsa in the stack, but no asoundrc/alsa.conf file is used
    • [UPDATE] In 121020 firmware, 2 system properties appeared:
    • [UPDATE] In 121020 firmware, the system setting audio_output_channel drives the output device
    • [UPDATE] In 121020 firmware, connecting an USB Audio card we obtain a pop up notifying the audio input and output can be changed
    • [UPDATE] In 121020 firmware, if an application needs audio recording capabilities (like Skype, Google Hangout, Google Talk in Voice chat), is set to AUDIO_CODEC (and no more AUDIO_HDMI)
      • Temporary workaround before automatizing it: go to Audio Settings and set output device back to AUDIO_HDMI
    • I wrote an app to show status of settings before and during a call (Skype or GoogleTalk)...
      • Unfortunately, they are not changing the setting, or at least, there is a setting key called audio_output_channel, which is always set to AUDIO_HDMI
  • Remount /system with RW capabilities
    • Already tried, unsuccessful: mount binary, busybox, adb over wifi, total commander - always "Fail: read only filesystem"
      • Seems some devices (like mine) have a corrupted /system partition, there are 2 solutions:
        • Fix the current image
          • Using a Lubuntu image we can manage to backup, recreate the partition and restore the data
          • Download the Lubuntu image
          • Write the image on the ยตSD (various methods and OSes here)
          • Once MK 802 II boots, you can use miniand as password
          • Backup the data in /system
          • Delete and re-create the partition (you can use GParted or fdisk)
          • Restore the data
        • Update the firmware or reinstall the existing one
  • How to Update to firmware 2012 10 20
  • Keyboard mapping
    • It is still in EN language, but it can be fixed with apps on Google Play, it is a minor issue


Trying to rebuild from scratch or using CM9 or CM10 repos is possible, but some features will surely break (video acceleration, wifi...). So the way we must follow should be trying to patch as little as possible to enable all the missing features.

Tuesday 28 August 2012

Softmodem communication on Android

One of the projects I would like to proceed but I am a little stuck due to limited amount of time...
Being able to communicate between Arduino devices and Android via audio cable.
The idea is simple (and not mine): modulate a carrier wave using frequency changes in correspondence of binary data changes. It is called Frequency Shift Keying.
Obviously, transmission data rates are not suitable for media streaming, but enough for trasmitting small amount of information like commands, data from sensors connected to Arduino board, etc....

There is a similar project, called Androino. Another working example, this time on Apple hardware, is IR-Remote.
I think it was a university project but I think it has been abandoned. Source code is available but I wasn't able to make it work.


On the hardware side, all I bought is:


Talking about the software, the Arduino code is ready and available as serial interface. It has been developed by ARMS22 (authors of the board too). It is available on this website. They focused their attention on iPhone, but I want to make it work on Android.

An Android client existed too, but it has been removed from the website. For receiving data on Android, the main idea is to use the Audio API to record chunks of audio, perform a zero crossing algorithm on it to store the "distance" between crossings. Then perform an RLE to translate it into valid byte values.
This will be packed into a threaded library offering an input and an output queue as interface for reading incoming data.
For sending data, some code in Javascript is available and it should not be too difficult to implement it in Java.

The issue can be the battery consumption, since we are continuously recording&processing Audio, having no interrupt on Android side.
I am sure an ADK board is the best way to communicate with Android, but it wouldn't be cross-platform and cross-device.

ODROID-X ordered... New project!

ODROID-X is a development board based on Samsung Galaxy S III CPU (Exynos 4412) produced by Hardkernel.
It seems a perfect platform for Android Platform Development. Kernel sources for Android 4.0.4 are available and Linaro seems to support it too.
My first attempt will be to be aware of the potential of the board and on the stability/reliability of the system.
Then tackle down the missing features and/or bug fixes that would make it a perfect device for:

  • Mini PC (focusing on support for webcams, enabling video calls, chat apps)
  • Android Gaming Console (it seems to work properly)

Next steps...

ODROID-X is more or less ready for Android 4.0.4 (I'll confirm when I'll receive it). The missing features can be the support for webcams (at least the ones supported by Linux Kernel having UVC interface) and gamepads (USB HID or BT HID ones).
The webcam support has been studied and Aptina published a whitepaper providing an overview on Android ICS Camera HAL.

Game controllers seem to be already supported.
After the break, gaming capabilities of ODROID-X.