Thursday, November 12, 2009

HookLogger - Symbian debugger tool

Do you have memory leak or leave problem? Let's try this tool, HookLogger!

References:
http://developer.symbian.com/main/tools_and_sdks/developer_tools/supported/hook_logger/index.jsp

Wednesday, November 4, 2009

Setup Symbian environment

Symbian C++
1. Perl (e.g.ActiveState Perl 5.x)
2. Symbian SDK (S60 3rd Edition, S60 5th Edition)
3. OpenC/C++ plugin (for S60)
4. Carbide (Carbide.c++ v2.02) IDE for Symbian platform development.

Note
- The SDK and your source files must be located at the same drive
PyS60
References
http://wiki.opensource.nokia.com/projects/Installing_PyS60
http://developer.symbian.org/wiki/index.php/Python_Technical_Overview#Table1

Thursday, October 8, 2009

Gps Tracking on Google Maps/Goole Earth from Navigon


Navigon is probably the best navigation brand on-date. Several new products launched since 2008 are most known for several outstanding features such as Reality View, Terrain View, 3D City View, pedestrian navigation and multiple alternative routes. Recently, it was also added a new GPS Tracking features which allows the user to view the route on Google Earth and Google Maps using kml format. A feature which I would like my navigation to have which was known to be suported by Garmin navigation.
Open GpsTracking using Goolge Earth, simply click "File -> Open" on Google Earth to import the kml file. To use it on Google Map, you need to upload the file to internet, and copy the URL to the Search Box.

Friday, October 2, 2009

Variadic Macros

I ran into a problem of variadic macro __VA_ARGS__, the code porting from Windows when compling in Symbian. It issued the error "badly punctuated parameter list in `#define'" and caused "cpp.EXE" to stop with failure.

Google a bit and the solution was found under NewLC:
http://www.newlc.com/forum/variadic-macro-problem

An information about variadic macro for GCC was to be found here:
http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html

Friday, September 18, 2009

Problem in compliation on GCCE & CW

I encountered a compilation problem when trying to build a huge library which require many other APIs. It happened on both CodeWarrior and GCCE! What could it be?
Carbide.C++ for CW seemed to compile all cpp files but could not complete the complilation at the end then hang over. (No compilation error had been reported) Whereas GCCE was even worse,
Internal compiler error in dwarf2out_finish dwarf2out.c 13110!!

was yield after several cpp files built. Although commenting out these reported error file, the error was still moved to the other files! It should not be the error from source code anyway.

Solution:
Adding OPTION CW -w off in your mmp file sounded to solve the problem on CW! (At least in my case, there were too much warning that's why the compiler couldn't end the compilation beautifully!)
And now what about GCCE ? I did the same with OPTION GCCE -w to suppress the default "-Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas" in GCCE.mk.
Checking the GCC document, I then decided to change the debug option from "dwarf" to "stabs" but this did not help either. (-gdwarf-2 and g3 are the default GCC setting, so I override this setting in the project file, my mmp.)
Hmm...let's try other setting. This time with with OPTION GCCE -g -g1 -ggdb ...and it worked!! Done!

Monday, August 17, 2009

Simple Symbian Makefile

Symbian requires makefile for gcce build.
Here is the sample of my makefile, let's call it myproject.mk


# myproject.mk
#
TARGETDIR=.
CERTDIR=../../../../Certificates
TARGETSISFILE=$(TARGETDIR)/myproject.sis
TARGETSISXFILE=$(TARGETDIR)/myprojects.sisx
TARGETPKGFILE=$(TARGETDIR)/myprojects.target.pkg
SOURCEPKGFILE=$(TARGETDIR)/myprojects.pkg

SOURCECERFILE=$(CERTDIR)/dev.cer
SOURCEKEYFILE=$(CERTDIR)/dev.key
PASSWORD=mypassword

BLD : do_nothing

CLEAN : do_nothing

LIB : do_nothing

ifeq (GCCE,$(findstring GCCE, $(PLATFORM)))
FINAL :

$(SOURCECERFILE)
@echo EPOCROOT=$(EPOCROOT)
@echo $(PLATFORM)
#Delete existing sis file
@echo del $(TARGETSISFILE)
@echo del $(TARGETSISXFILE)
# we use command here, please note that we need the double quotes here
del "$(TARGETSISFILE)"
del "$(TARGETSISXFILE)"

#Pass the PKG through the CPP precompiler
# @echo cpp -P $(SOURCEPKGFILE) $(TARGETPKGFILE)
# cpp -P $(SOURCEPKGFILE) $(TARGETPKGFILE)
@echo perl -e "print `makesis -d%EPOCROOT% $(SOURCEPKGFILE) $(TARGETSISFILE)`"
# we can execute this with perl as well
perl -e "print `makesis -d%EPOCROOT% $(SOURCEPKGFILE) $(TARGETSISFILE)`"
#Sign the SIS file
@echo signsis -v -s $(TARGETSISFILE) $(TARGETSISXFILE) $(SOURCECERFILE) $(SOURCEKEYFILE) $(PASSWORD)
signsis -v -s $(TARGETSISFILE) $(TARGETSISXFILE) $(SOURCECERFILE) $(SOURCEKEYFILE) $(PASSWORD)
else
FINAL : do_nothing
endif


Now, if we want to execute the makefile without calling "abld" command, you need firstly set $PLATFORM=GCCE at your shell. Next we can call the make from here:

c:\...sis\>make -f myproject.mk


If anything goes wrong, you can try with "make -d" to debug.

Some pitfalls from make:

- *** missing separator *** => You use the "space" instead of "tab"
- Invalid switch when trying to execute the command from (dos) shell => you missing double quote around the argument passing to the command.