Writings Photos Code Contact Resume

You are here

ISI specifications for Nokia modems.

Submitted by msameer on Sun, 25/04/2010 - 9:48pm

A serious limitation of the N900 connectivity subsystem IMHO is the inability to create multiple connections. One can only have one connection at a time. This was a problem when I started investigating MMS support for N900.

Of course one can use some undocumented API like fMMS to have more than one GPRS connection. There's only 1 problem with that approach. You can end up with IP/subnet clash.

I've been thinking about a kind of hacky solution for the MMS problem: Let's have a tun interface with a known IP such as or 192.0.2.x. We force all of our traffic through that interface and "something" sits in the middle to route the data between tun and the GPRS modem.

Sounds easy but not that easy.

The only information available about ISI modems and GPRS manipulation is some patches adding GPRS support to Ofono.

I've been playing with them for a few days. I managed to get a PDP context which fails to activate.

Hmmm, Googling a bit revealed the Symbian Modem Adaptation project. The code is there but it wasn't enough.

What I didn't notice initially was a semi-hidden link to the wireless modem API server. There I found not only complete documentation for ISI; but also header files with al the constants. More than the ones available from the GPRS patches.

Now manipulating the modem is just the matter of reading the documentation (READ the license aggrement first before you get them), creating a bunch of phonet sockets, using sendmsg() and recvfrom() and parsing the output.

Now I wont wonder why does my phonet packet:

23:19:10.543792 Out ethertype Unknown (0x00f5), length 47:
        0x0000:  006c 3100 1a00 6a37 0600 2100 0000 0205  .l1...j7..!.....
        0x0010:  0e08 696e 7465 726e 6574 0040 0190 04    ..internet.@...

look different than the one sent by the connection manager:

23:16:58.296905 Out ethertype Unknown (0x00f5), length 47:
        0x0000:  006c 3100 1a00 6800 0600 2100 0000 0205  .l1...h...!.....
        0x0010:  0c08 696e 7465 726e 6574 0090 0402 00    ..internet.....

I'm using 0x0e while they use 0x0c

There'a also a hidden excel (DUH!) sheet showing which ISI API is mandatory and which is not.

Happy hacking!

P.S. This might be old information but I've just discovered it.

MMS support development to be suspended until the end of February.

Submitted by msameer on Wed, 03/02/2010 - 6:11pm

The gitorious repository now contains a broken mms-manager, a non functional mms-ui (because I changed the DBus interface ;-)), a preliminary mms viewer and a broken network connection manager. How pretty is that ? ;-)

I've been redesigning the DBus interfaces and I think I reached something. The UI can be easily adapted after that.

However, I'll be on vacation until the end of February. I can't work on mms until I'm back.

I'll try to commit and push the code I have on my laptop but the stuff will still be broken.

This is just a quick status.

Good wishes for the newly married couple ;-)

mms-support progress

Submitted by msameer on Sat, 09/01/2010 - 4:42pm

Hi again!

I'm still working on the MMS support for fremantle.

I've created a gitorious mms-support repository that hosts all my code. Clone it and check ;-)

git clone git://gitorious.org/mms-support/mms-support.git

I've improved the parser a bit. It should be capable of parsing the headers in my operator's notify-ind.

I've also implemented a wap push handler (Interface stolen from Frals ;-)) and managed to receive the notify-ind on my N900 :-D

There's also an untested connection-manager using libconic (Untested because there's no UI yet to configure it). I hate using conic for such things but it's the only available public interface :-(

I need to figure out how fit the whole thing together.

And no UI of any kind yet.

More posts later.

mkmms available.

Submitted by msameer on Mon, 04/01/2010 - 1:29am

As promised yesterday, I'll start cleaning up my code a bit preparing to post it here.

Here's mkmms. It's a minimalistic application that allows you to create an MMS and attach ONLY 1 file which can be jpg, png, gif or txt (I hadn't tested anything beyond jpg).

Note that it's alpha quality.

There's also a parser that will print some info about any MMS passed as an argument but it's commented out.

Use it like this:

./mkmms <to address> /home/mohammed/me.jpg m-send-req.mms subject

It needs QtCore and only that.

Don't ask about the license. It uses some bits from Qt extended, some from mmsdec and some are my own but you should be OK if you assume GPL for now.

I wrote it to make sure the MMS library works and to generate MMS messages to test.

Next, I need to clean up my sending code and post it.

Now a bit about MMS:
MMS is just a bunch of attachments cooked together using the WSP encapsulation protocol.
A typical MMS consists of a header and a body. The header contains the From, To, CC, BCC, Subject, ... parts.

The body contains the actual parts. A part can be a video, an image, some text or anything (Not exactly sure).

Now there's something called SMIL out there.

SMIL is some sort of XML that tells the "phone" how to render the MMS. MMS can contain a SMIL part and that's usually the first part of the body (I think the standard demands it being the first part) but it doesn't have to be there.

For now, I'll ignore something called SMIL at all.

Next: Sending MMS to the actual gateway.

Not First MMS sent via N900 (Fremantle)

Submitted by msameer on Sun, 03/01/2010 - 4:27am

I've spent the past few days trying to get MMS to work on the N900.

EDIT: Seems frals has managed to beat me!

I started by trying to enable receiving so I can try to monitor DBUS and see what's going on. This failed and my operator (Elisa Finland) sent me an SMS stating that they can't send me the MMS configuration and I have to send an MMS first (According to Google translate's Finnish to English translation).

I then decided to try implementing sending.

I needed a custom MMS encoder so I can build my MMS. I also discovered that I know nothing about these things and started working on an MMS encoder/decoder.

I used a sample MMS, enjected my number and kept trying.

After long hours of working, I managed to hear my N95 vibrating and it was it :-D

This is just a proof of concept. Sending works. I need to figure out how to receive the wap push notification and how to bring up the GPRS connection in a clean way.

I'll post detailed instructions and the code I used when I get some sleep ;-)

Here's the HTTP headers sent:

Content-Type: application/vnd.wap.mms-message
User-Agent: NokiaN95_8GB/31.0.015; Series60/3.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
x-wap-profile: http://nds1.nds.nokia.com/uaprof/NN95_8GB-1r100.xml
Accept: */*, application/vnd.wap.mms-message, application/vnd.wap.sic
Accept-Charset: utf-8\r\nAccept-Language: en

Ah, and I didn't yet parse the reply I've received from elisa's server ;-)

Finally, a nice screenshot of my terminal:

Can it be any worse ?

Submitted by msameer on Mon, 16/11/2009 - 1:43pm

* Broken laptop, +200 euros to replace the fan because I was dumb enough to void my 3 years warranty.
* I lost part of my tooth today while having lunch (With the filling of course) and I need to fight tomorrow at 8 AM to get urgent dental care.
* ...

Corporates are evil.

Submitted by msameer on Sat, 29/08/2009 - 9:33am

After the N900 has been announced. I was saying this to a friend of mine:

[Me] so
[Me] remember our discussion about a Linux powered phone ? ;)
[Me] sorry I convinced you that Linux on phones is a no while I knew we were doing it :)

No KLM, I'm not paying money to torture myself again.

Submitted by msameer on Thu, 16/07/2009 - 12:30pm

This is a copy of what I've sent to KLM customer care after my disastrous flight from Amsterdam to Cairo:


My flight was KL0553

On Friday, the 10th of July, I arrived at Schiphol to catch my connecting flight to Cairo, Egypt.

I already had a boarding card from Helsinki. I checked in online a day before (On Thursday).

The ground crew treated me in a bad way. I did not find my seat.

I originally asked for a seat by the corridor and found out that they changed my seat.

They explained that there's a handicap person and 2 young children are flying alone so
they gave him my seat. I asked them to check if the new seat they offered my is also by the corridor and they said no.

I explained that I can't take that seat because I'm a tall person and it'll hurt my body in a long flight like that.

I've been told that I should be happy I have a seat already.

I completely felt shocked. I payed the fees the company asked for and I checked in online a day before the flight so how can you treat me like this ? How can they tell me that I should be happy ?

I asked her to give me the old boarding card along with the new one and I'll go explain to the cabin crew the problem so they can solve it. Unfortunately refusal was the only thing I've got.

I did not like how I'm being treated, Said that I'm not accepting that seat and I'm not moving from here until they find me a similar seat and explained why do I need a similar one.
The response I've got was an offer to offload my luggage!

I asked for a manager to speak to and I've been denied that too.

After a lot of debate and contacting the cabin crew, they offered me a suitable seat and been asked to move along after telling me that the cabin crew are aware of the problem. I entered the aircraft to discover that the ground crew lied because no one at the aircraft knew anything especially that the new seat was also taken.

The crew there were helpful but they had to contact the ground people. I've seen a lot of suitable seats but the irresponsible ground crew refused to offer me anything but a middle seat. I had to accept at the end.

Now, I did all what KLM asked for, I complied yet I did not receive the service I've payed for.
I got back, neck, shoulder and leg pain because of the middle seat. I've been treated in a bad way by the ground crew and they also lied at me.

I'm completely disappointed and I doubt I'll ever use KLM again.

And here's their reply back:

Dear Mr. Hassan,

Thank you for your email dated July 12, 2009 regarding your recent journey with KLM. Please accept
our most sincere apologies for any inconvenience we may have caused you.

We regret that at check-in we were unable to offer you the seat of your choice.

In general, seat reservations may be requested three months prior to departure for intercontinental
flights. For European flights seat reservations may be made via our online check-in facility from 30 hours prior to departure. In our General Terms and Conditions of Carriage, article V.4, it is mentioned that we shall make reasonable efforts to meat seat allocation requests, but cannot guarantee the allocation of a given seat, even if the Reservation is confirmed for that seat. KLM reserves the right to change the seat allocation at any time, including after boarding, for operating, security or safety reasons.

We are very sorry to learn that you were unhappy with the service you received while checking-in for your recent flight. We share your opinion that, even though the Conditions mentioned above, our staff could have cleared these rules to you on a friendly way. We are very sorry to read that they did not make any effort to assist you finding another preferable seat. A sincere apology is offered for any discourtesy you encountered.

Naturally you expect our staff to provide the best possible service and it is inexcusable that you should have been confronted with anything else.

We appreciate you taking the time to provide us with this valuable feedback and we will use it to further improve our service.

We sincerely hope that this experience will not deter you from flying with our company in the near future.

Yours sincerely,

Scum, I replied back:


I booked the seats almost 2 months before the flights.

I'm sorry but given the bad level of service, the severe body pain I've had, the rude way the staff dealt with me and the inability of customer care to take an action, the return flight to Helsinki shall be my last flight with KLM.

Best Regards,

No, You don't threaten people by telling them we will offload your bags and just say sorry.

Booked my tickets (Summer 2009) :-)

Submitted by msameer on Sat, 16/05/2009 - 7:04pm

To Cairo and beyond (-:

Too bad I'll transit for one hour in Charles De Gaulle again. I'd rather be prepared to lose my bags :-)

And did I say from 10.07.09 to 09.08.09 ?