On USB projectors, linux and libam7xxx
I was looking into compact/mini/pico/handheld projectors, and I obviously wanted something I could use under GNU/linux, there were basically two choices:
- Pick up a projector with VGA/HDMI: Operating System independent.
- Pick up a USB projector: shipped only with drivers for MS Windows (and sometimes for MacOSX too).
Since the first choice was more expensive and I verified that writing a driver for the second case wasn't too hard, I picked up an Acer C110, I paid it about 160 €, but you can find it even cheaper somewhere else, grr.
AM7X or AM7XXX
The C110 is based on an Actions Micro AM7212P IC and uses USB bulk transfers with a simple packet based protocol on top to exchange data and commands to and from a host system and the AM7XXX chip.
Other projectors using the same protocol are:
- Acer Series C pico projectors (C20 C110 C112
- Philips/SagemCom PicoPix projectors (PPX 1020, PPX 1230, PPX 1430, PPX 1630)
- CEL-TEC MP-01
- Other unbranded projectors
These projectors use the USB Vendor and Product IDs
1de1:1101 in mass storage mode and
1de1:c101 in display mode.
Some DPFs too (from Hannspree for instance) are known to use these chips but I don't know yet if they can be put in USB display mode.
I will refer to these devices as either AM7X or AM7XXX devices.
Open Source driver for AM7XXX devices
Reto Schneider and I are reverse engineering the USB protocol used by these devices, using USB dumps and disassembling the Windows device driver, and a basic but already usable library to communicate with those AM7x based projectors can be found in libam7xxx. Reto was the first to start working on that, in the form of acerc11xdrv.
So you can now get these projectors to work wherever libusb-1.0 works, that means you can use them with your phone if it can run GNU/Linux for instance, or even Android/Linux but I don't have an Android device to verify that.
For now all the communication about the development is happening on the
#am7xxx IRC Channel on the Freenode Network, come find us, and let us know if you want to help: like hosting a mailing list for us, or sponsoring some hardware (USB projectors you want to use freely or devices you want to use these projectors with).
Side note: the user manuals of these devices sometimes refer to the functionality of displaying images over USB as
Display over USB (or DoUSB), this definition is used on a lot of projectors but I don't know if it refers always to the same protocol/mechanism to send images over USB.
Linux running ON other projectors
Incidentally, when I was doing my pre-purchase market research, I ran into several projectors which —unsurprisingly— are running a Linux system themselves (linux kernel, busybox, etc.), here is a summary of what I found out:
Samsung SP-H03 (not based on AM7X): the firmware image can be downloaded here, and Samsung is providing the source code for the Free Software used in it, you can find it on opensource.samsung.com (AFAIR Harald Welte gave them some directions about GPL compliance, right?).
This could be an interesting device if you want to run your own code on a projector.
Acer K330: based on a chip of the same am7x family as the C110.
The firmware image is available for download and it does contain the Linux kernel and other Open Source software, but the source code is not available, neither Linux or the GPL are mentioned in the downloadable documentation; I am going to do more research on this later to see if Acer is in compliance with the GPL.
Having the ability of processing an image before projecting it —either on an external system, or on the projector itself— opens up to a lot of possibilities, and I can foresee an increase of AR applications using projectors; so, do you think there is enough interest for an Open Projectors project? A place where we can share the techniques (keystone correction, or some more sophisticate anamorphic transformations by the means of a Camera-Projector system) and the Open Source software implementing them, all in a single place.
Get in touch if you have any ideas about that.