Is it possible to make Wifi calls/texts on the Ringo phone?
Not yet. Someone would have to write a VOIP app compatible with your carrier, or Google Voice, or Skype like those available for Android and IOS; since all those APIs are probably proprietary, that’s not likely, since those companies don’t give a whoot about Ringo.
Since no browser, even web interface to Google Voice can’t work.
As a telecom engineer who owns a company that develops VoIP/UC software, this was one of the FIRST things I looked into. Bad news: I’m 99% certain it just isn’t possible on Ringo.
There are plenty of open-source SIP stacks out there…some of them are quite small (compared to others). SIP signalling is not the issue here, as that’s just UDP packets with commands and parameters. I can write a basic SIP stack for simple signalling easily enough and there’s a perfectly good example of just the signaling aspect here:
The issue is the audio codecs either being too large to fit or too complex to process in real-time. GSM, the “smallest” of the codecs won’t work due to CPU limitations (The linear predictive filter used in the GSM codec is the main computation bottleneck). Other codecs like ulaw/alaw, that would be easier on the CPU, are just too large, code-wise and/or RAM-wise, to fit. It would even be difficult to fit GSM into the 2MB app partition used by Ringo alongside other elements like Ringo libraries and GUI. Even if we switched partition schemes, blew out the Ringo Firmware entirely, and opened up the entire 4MB of Flash, we’d probably come pretty close to the limit just trying to add a reasonable GUI to the stack and codec. (4MP Flash would probably be just enough for a “headless” controller device that didn’t have to fuss with all the extra libraries and hardware of a user interface.)
The reason things like Calls and SMS work on Ringo is because most of the heavy lifting for dealing with the SIM card, carrier communication, calls and call audio, SMS, etc is being handled by the firmware of the cellular module, which has been specialized for those tasks allowing simple command/response from the Ringo firmware. Then, when on a call, the cellular module streams the audio to Ringo as normal audio with no special processing necessary. WiFi works because the WiFi shield has its own firmware, too…Ringo just sends commands via libraries and awaits responses. Since neither of these modules have a SIP stack in their firmware - and we can’t externally send and return GSM codec audio through the SIM module, we’d have to provide our own code from scratch that does all the heavy lifting. That’s where we’d run out of space and/or resources quick.
Hey I was not looking for a fix for wifi calling but I just want to say that I learned so much from your awesome answer. Thank you for writing all that!! One quick question though, do you know if it’s possible to have ringo send/receive MMS messages? I have searched this community for an answer but can’t seem to find one.
Tl;DR: Possible, but a solid 8/10 difficulty to implement, as there are other prerequisites that need met first, like cellular internet connectivity and carrier specific MMSC settings.
MMS support is a bit tricky, but not totally impossible. The way Carriers handle this is by initiating a message notification via SMS containing a specially formatted URI to an MMSC hosting the MMS content that the device must then go download and parse to show you the message.
In a typical phone-to-phone MMS transaction, the process of sending and receiving the MMS message works like this:
- The sending phone initiates a data connection that provides TCP/IP network connectivity, usually over GPRS.
- The sending phone performs an HTTP POST to an MMSC of the MMS message encoding in the MMS Encapsulation Format, as defined by the Open Mobile Alliance. The encoded MMS message includes all of the content of the MMS message, as well as header information, including a list of intended recipients for the message. (Note: In most environments, the HTTP POST will be routed through a proxy server. Some devices will use wireless profiled HTTP and TCP through a WAP 2.0 proxy server, while other devices will use the Wireless Session Protocol, WSP, through a conventional WAP proxy server/gateway.)
- The MMSC receives the MMS message submission and validates the message sender.
- The MMSC stores the content of the MMS message and makes it available as a dynamically generated URL link.
- The MMSC generates an MMS notification message, which is sent via WAP Push over SMS to the message recipient(s). This MMS notification message contains a URL pointer to the dynamically generated MMS content.
- The recipient receives the MMS notification message. It then initiates a data connection that provides TCP/IP network connectivity (usually over GPRS).
- The recipient phone performs an HTTP (or WSP) get to retrieve the MMS message content URL from the MMSC.
So, since exact formats, WAP/MMSC hosts, etc can vary a bit between carriers, this would require some manual setup for any given SIM card you’d want to use. Major phone makers and OSes will employ built-in databases with all the known carriers they support and their specific MMS/WAP/MMSC host information and configurations and then setup MMS support for their message apps based on the Carrier ID supplied by the SIM.
Technically, Ringo could handle all this, but it would require a total rewrite of the SMS app and someone compiling the necessary Carrier MMSC DB (and/or user setting screens for manual config) for any given carrier we might try to use.
There’s one other caveat: since Ringo isn’t currently written to be able to take advantage of the Cellular internet connection available from the SIM module, we’d have to write those functions into the firmware, as well. You cannot…simply cannot…reach out to a carrier’s MMSC host to download messages from outside the cellular internet connection (security reasons), so we can’t leverage wifi for downloading messages. (NOTE: Carriers use a bit of a workaround to allow MMS download over a carrier’s WiFi Calling feature, as WiFi Calling is typically setup like a VPN connection back to the carrier’s network from whatever non-carrier network you’re using over WiFi.)