Using Nokia N8 to make SIP calls over 3G and WiFI

Hi there,

I’ve been playing with the new Nokia N8 (Symbianˆ3) and was able to use it as a softphone to make and receive VoIP calls using my default SIP provider. As the setup is not that straightforward, I’m sharing the steps here.

Installing SIP VoIP Settings

The first non-obvious thing is that the N8, as well as other S60 v5 and v3 devices like 5800 and N85, doesn’t come with the settings applications pre-installed. Without that, the built-in SIP settings is pretty much useless for our purpose.

So, rush to Forum Nokia and get / install the settings application. The new version is compatible with Symbianˆ3 devices so it fits nicely the Nokia N8.

Creating a SIP profile

To actually use your VoIP provider account you will need to setup SIP proxies, user name, password, codecs, etc. Nokia has split this rigmarole of settings into two separate things which it calls SIP Settings and VoIP services. So you’ll need to create both. Let’s start with the former.

Start by opening the Menu and going into:

Settings > Connectivity > Admin Settings > Net Settings > Advanced VoIP settings > SIP settings

If the above settings page is not available, then check the previous step.

Now create a new profile by going into Options > New SIP profile

Here you’ll need to fill in the connection details as the SIP proxy address and login information. In my case I use Inphonex and they provide detailed information on how to do that. Your experience may vary but your provider should require similar settings, basically is to set Proxy and Registrar servers.

Creating VoIP service

Once the previous is done, go up one level and then go into VoIP services

Create a new service Options > New service and point it to the SIP profile you just created.

[Optional] Enabling use of VoIP over 3G

If you only intent to use WiFi to make VoIP calls, then skip this step, otherwise click the name of the VoIP service you just created and go into Profile settings.

Now search one configuration flag called “AWCDMA” (Allow WCDMA), change that to On.

Testing

Find more about how to make cheap calls to india.

Go to your phonebook, there should be a new tab on the top. Between Contacts and Groups, a tab with the globe and a phone. Click it and you should be able to click a Sign-in option (if it’s not signed-in already). To confirm that, check whether this phone+world icon is shown at the top-right corner of the status-bar, close to the Bluetooth and WiFi icons (see Image).

Now open the dialer, dial something and click Options -> Call -> Your_SIP_Service_name

Should be that 🙂

Hopefully this post if useful for you, comments are always appreciated. Enjoy!

Mapping mouse position to angles (QtQuick example)

Hi there! This post is to share with you something I hacked these days.

The use case

Image you are writing a widget or a piece of an application interface and you want to rotate something based on a mouse click. For instance, you may have a widget that looks like a rotating knob, or a round analogue gauge.

For this post, let’s use a car dashboard speedometer. What I want here is to click somewhere on the gauge and have the needle rotated towards the current mouse position. Check this video of how it should work.

The problem

In Qt, rotating a widget is easy in the context of QtQuick or QGraphicsView, just define the “rotation” property to the desired angle and you are all set. The problem here is to find out what the desired angle is.

Here I want to find out which is the angle formed between a given mouse position and centre of the gauge, or the origin of the needle rotation. Getting the mouse position is easy in QtQuick, simply watch the “mouseX” and “mouseY” properties of a MouseArea. But what about converting that to an “angle” ?

In mathematical terms what I want is to convert the mouse position from linear coordinates (X,Y pair) to circular coordinates (angle, radius pair) with the centre of the gauge being the origin of my plane. But designers using QtQuick really don’t want to deal with that.

The solution

I made a Qt class meant to be used as a “model” or “helper” for both C++ and QtQuick applications. This class hides the trigonometry required for that conversion by exporting a set of properties, namely:

  • originX
  • originY
  • x
  • y
  • angle
  • radius

So how would we use it in our example?

  1. Set “originX” and “originY” to the centre of the gauge. That’s the origin of the needle, right?
  2. Set “x” and “y” to the current mouse position. In QML that would be “x: mouseArea.mouseX” and “y: mouseArea.mouseY”.
  3. Read the value of “angle“. In QML that would be something like  “needleRotation.angle: angleModel.angle”

Then QtQuick data binding system will handle everything else. Every time the mouse moves, the properties “x” and “y” will be updated, the model will then recalculate the values of “angle” and “radius” causing the needle to update itself.

Below you can see a diagram of that behaviour. Note that the opposite also works, that is, once I explicitly set an “angle” and “radius” in the model, the values of “x” and “y” are automatically updated.

Relationship between AngleModel and different coordinates

Relationship between AngleModel and different coordinates

The Source

To grab the code go to Qt Components Gitorious and check:

  • examples/clickable-dial
  • examples/angle-model

Hope you enjoy it. Comments are always welcome.