Introduction
This is a GPS Tracker software for the Windows Mobile platform, written using C# and compatible with .Net Compact Framework 2.0 and above.
The purpose of this software is to accept commands remotely sent to the device using various services (currently only SMS) to configure and get its current geographic position (Latitude/Longitude).
The software has no visible interface on the device as it will be controlled remotely; this would allow me to place the device anywhere without the need for any "local" maintenance.
My primary use was to track the location of my car, in case it was lost, stolen or misused. The device would be permanently connected to the car battery in a strategic hidden location, without effecting the signals too much.
Requirements
The main requirements were:
The device should be available (to accept commands) at all times, tolerate software bugs and have failsafe mechanisms to overcome some of the platform limitations.
The implementation of new services (i.e twitter, etc.) wouldn't be possible on hardware-based GPS Trackers as the software is normally "static" without rights to modify the firmware.
It would be very difficult (and needless) to write the software using the ARM Assembly language (as would be the case with custom embedded hardware) or modify existing hardware-based trackers. The .NET Compact Framework was chosen for many reasons; maturity (on Windows Mobile 6 platform), flexibility, availability of libraries, speed and rapid development and convenience (as i know the C# programming language already).
- Repond to commands remotely
If i were to put it in a car, i obviously would not have access to the graphical user interface. This would mean i would need the device to communicate using SMS/Internet/Email/Twitter/etc.
One of the advantages of using a mobile phone as a tracker is, it can be used as a backup phone in emergencies (which can't be said for many of the standalone GPS Trackers).
And i've already had a Satellite Navigation software (TomTom) on the device which could also come in handy in emergencies.
- The following features:
Message alerts when:
- Entering or exiting a virtual "fence" - e.g. I would want to receive a text message when my car (i.e tracker device) moves outside (within 1km radius) of or gets close to my home.
- Exceeding speed limit - e.g I would want to know when (after i lend my friend my car) tries to go over 70mph anywhere (and another alert when it falls below my set limit).
- It's on the move or stationary - This would be useful to track car theft - e.g I could set the device to alert me whenever the car moves from its place after midnight (or between certain hours). It could also inform me whenever the car stops at someone's house and when they leave. Also useful if i'm expecting someone to pick me up.
- Entering and leaving certain areas within a set radius - e.g. I would be informed when my car reaches (or goes past) a certain house, place or city.
- Battery level is low or when it reaches a set limit - keeps me informed when battery needs recharging or if its permanent (like in my case) might be an indication of connection problems or car battery failures
- Information about its current location
- Track locations for certain periods of time (initially in KML format)
- Call back from the device
- Loud alarm (plays alarm5.wav at full volume)
- Switch on/off certain types of alerts
- Remote reboot
- Reboot using a phone call signal (e.g after a certain number of rings/seconds)
- Update remotely
- Upload files (KML tracks, settings, debug logs) remotely
History
In 2009, i started using a software called
RemoteTracker which fulfilled many of my requirements but it was missing a few of the features i required mentioned above.
There are now many GPS Tracker devices and web based software which allows tracking but none of them fulfilled all of my requirements.
Windows Mobile was one of the best and the most powerful platform for development, following the same framework as its Desktop equivalent. Unfortunately, few months after my initial plan, Microsoft announced the new Windows Phone 7 Operating System (and devices) and had planned to abandon the Windows Mobile 6.* platform.
Shortly after, i put my project on hold to get more information about the new platform so that i could target this platform and newer devices) but it was a long wait.
Present
Unfortunately over the years, Windows Phone 7 failed to impress and i decided to continue developing for Windows Mobile 6 as i've already had two mobile phones with very little sale value so I decided to put them to use.
The devices were: SPV M700 (HTC P3600) and HTC Diamond (HTC P3700).
I nominated the older device for use in my car (SPV M700) because:
- It has a very good GPS reception (compared to the HTC Diamond)
- Relatively cheap
- I've had additional accessories (Extra battery, casing, cables, etc) which were useful.
- Much more reliable for my purpose inside a car.
There are many limitations on the Windows Mobile 6 platform (i.e lack of SSL/TLS Socket support, cryptographic libraries, receiving of emails, etc.) which has hindered me from implementing the "multiple service listeners" feature - A topic for some other day. At the moment, all commands can be sent/received via SMS text messages only.
In the future, i may decide to port the software to Android and/or the Windows Phone 7 platform.
Status
I have just completed implementing the major features listed above and have started to perform some real-life tests.
Update: Please note, RCAgent.log file is limited to 100mb to prevent it from taking all the space on the external storage card. Once it hits 100MB, it will empty the file automatically to make way for new data. Make sure you backup this file if you want to keep its contents.
Post new comment