The work on the Nexus S was started in July 2011. At the time, we just discovered that the modem uses a Samsung-specific protocol.
On the Android architecture, communication with the modem is done via the RIL (Radio Interface Layer). While the modem runs its own non-free software on a separate CPU, the RIL runs on the main CPU in Android userspace.
The only free RILs we know of are for the well-documented and widely-used AT command set. Back in July 2011, we were desperate to see that there was no free implementation for the Nexus S modem protocol. Fortunately, we weren’t alone on this one. After asking around on IRC, we met a talented developer who owns a Samsung H1 device, which originally runs LiMo, a mobile operating system with parts of free software, at least with the Linux kernel. The developer (who’s known on IRC as ius) was part of the effort to port Android to the Samsung H1, but he didn’t stop there. He also investigated the modem protocol used in the device. And the most incredible is that he did find out most of the protocol messages and data structures. We together investigated on Nexus S as well, and, thanks to this incredible luck we had, the protocol is the same for nexus s. We managed to boot the modem and obtained the first messages quickly. Then, we decided to push Nexus S support to ius’ lib, renaming it libsamsung-ipc for the occasion.
But the adventure didn’t stop there. Another talented developer known as morphis, who works on the SHR project, free GNU/Linux system for smartphones and who accomplished a huge amount of work to add support for the Palm Pre devices modem protocol in FSO (the middleware used in SHR that is in charge of communication with hardware interfaces, including the modem) decided to get a Nexus S and joined the effort to achieve a working implementation of the Samsung IPC modem protocol.
Several months of work later, here we are, the free RIL we wrote for Android/Replicant has grown enough to deserve the release of a new set of images.
On this release, here is a quick summary of which major components are working and which are not:
- Telephony is stable enough, there is working in-call volume change and audio routing, though we miss some features like conferencing
- SMS are working nicely, including multi-part messages, both on sending and receiving
- Data has a minimal implementation that is far from being ready (but can be set up manually), so this will be for next time
- Some other minimal features are there (SIM I/O, DTMF, SIM unlock, etc)
- Some are missing (USSD, working airplane mode for instance)
There has been no major improvement for other components nor devices, even though we release images for Nexus One as well.
The images are located, at usual, at our OSUOSL-hosted ftp.