a3nm's blog

Random notes on the Hercules eCafe EX

— updated

I happened to stumble upon an interesting offer for the Hercules eCafe EX (163 EUR including shipping fees), and I couldn't resist and bought one. (I have to admit that I did hesitate with "ordinary" netbooks which offer more decent performance for only 40 EUR more, but I was tempted by the exoticism of an ARM architecture.)

Looking back at this, the most important point about the machine is: a strange glitch means that a few keypresses are lost every 30 seconds or so. This doesn't sound like much, but it's enough to make typing on the device very annoying, which means I've never used it seriously for anything; it's really a pity, because the device could conceivably be useful for a lot of things otherwise (though the impossibility of running a Web browser is a bit limiting, and the fact that you're stuck with a fork of the kernel at a specific version, and to certain binary variants of software to get hardware video acceleration, is a problem for sustainability). I've tried out several ways to investigate the problem, including recompiling the kernel with additional debug, disabling all USB power saving options, etc.; nothing shows up in dmesg whenever the keypresses start getting ignored... A possibility would be to replace the built-in keyboard with an USB one, but this would not be trivial. I'm a bit out of ideas with this machine, really.

The eCafe looks more or less like an ordinary netbook on the outside (though the design is a bit weird), but it pretty different inside because it uses an ARM processor (and a flash chip for storage). This means no mechanical parts at all (and no ventilation, no heat vents even) and ridiculously high battery life (roughly over 12 hours, though I should really benchmark it) but ridiculously bad performance.

The documentation available about the device online is sparse and there aren't that many people using it, so I thought I'd post some random notes about it in case someone wants to know more about the beast. I'm still discovering the thing, so there are many questions here and not many answers, but here you go.

Non-removable battery
There is no way to remove or change the battery. There is, however, a switch to physically disconnect the battery from the device if you don't want to use it.
SIM port
There is a port to plug a SIM card. I have no idea what it's supposed to be used for, or if it's connected to anything.
SD-card reader
Yes, the thing really has two sd-card readers: one external on the right side, and one internal reachable from under the device.
DIP switch
The device is advertised as having a "DIP switch" to boot a different operating system. You can find more info about that in this PDF. What the switch does is instruct the computer to search for an U-Boot installation at a specific position on an SD-card in the external reader. Might be fun.
The device has no proper BIOS, it uses U-Boot. I'm not exactly sure how good this is: the boot is not especially fast, and the U-Boot part seems to take some time (though it's hard to tell because of all the nice annoying splash screens which hide what is really going on). From the PDF mentioned above, it seems as if U-Boot is requesting a DHCP lease to do a TFTP boot, which might take a lot of time, but this is just a guess. I'd have to try with my own U-Boot setup.
The device has no real ACPI support but seems to use custom stuff instead. The battery status can be queried through /sys/devices/platform/imx-i2c.0/i2c-0/0-000b/power_supply/BAT0/
The device has pretty good suspend to RAM with pm-suspend. Resume really takes 4 seconds, as advertised. The stability of this is unclear.
Light sensor
The device seems to have a light sensor. I don't know yet how you can query it.
The backlight brightness can be controlled via /sys/devices/platform/pwm-backlight.0/backlight/pwm-backlight.0/, all the way from full power to no LCD backlighting.
Special keys
There are a few special keys, which all generate X events. On the keyboard: XF86Sleep, XF86MonBrightnessUp, XF86MonBrightnessDown, XF86AudioMute, XF86AudioLowerVolume, XF86AudioRaiseVolume, and keycode 248. On the right side with LED effects: XF68AudioPrev, XF86AudioNext, XF86AudioPlay, XF86AudioStop. It's nice that you can remap those to whatever you want, especially the four on the right side that can be reached even when the lid is closed. I still have to find a creative use for this.
Numlock and Capslock leds
Yes, there are some, which is pretty rare nowadays.
Keyboard feel
The keyboard feel is slightly hard but pretty nice. However, there is a really annoying glitch: some keypresses seem to be lost occasionally. I still have to debug this. It occurs both in ttys and when using X, so either it's the kernel or it's a hardware problem.
Wifi chip
It is driven with the non-standard rt3070 module. It seems related to similar models with good kernel support, but I'm not really sure. It seems pretty limited: for instance, changing the MAC address (SIOCSIFHWADDR) is not supported. Once again, hopefully there's a way to make this work.
Kernel limitations
The provided kernel isn't compiled with much stuff. For instance, LUKS, iodine and openvpn don't work.
Performance is horrendously bad. /proc/cpuinfo says the processor is an "ARMv7 Processor rev 5 (v7l)". Using Firefox on a reasonably simple HTML page is already pretty unpleasant. However, it's a nice ssh client (or text-entry station), except for the keyboard glitch.
Shipped OS
The shipped OS is a customized Ubuntu with a crappy netbook interface and custom repositories from Hercules without much stuff inside. The interface is probably simple enough to be used by anyone (except that it's so slow...) but it' not really good for a power user. It is possible to add the Ubuntu Netbook Remix Lucid Lynx repos and install the applications you want, though installing their kernel will not work.
Multimedia acceleration
Hardware acceleration for multimedia decoding is available though a proprietary modified version of gstreamer. It really makes a difference, ie. you can read a video with these extensions but not without. I'm not sure yet about how versatile this can be.
There is some documentation and code available though I didn't try to play with it yet. I did; you can rebuild the bootloader and kernel (it isn't entirely straightforward), but you're stuck with the provided kernel version, which includes some changes that would apparently not be trivial to port to a newer kernel...
Available memory
The machine is supposed to have 512 MB of RAM, but /proc/meminfo only reports 416680 kB MemTotal. Maybe this memory is reserved for something (video acceleration?), or maybe the kernel doesn't detect it correctly? or maybe the hardware just doesn't match the spec?
comments welcome at a3nm<REMOVETHIS>@a3nm.net