Enhanced GPS sample update

Some times ago I published my modded GPS_Sample code (see http://www.hjgode.de/wp/2009/05/12/enhanced-gps-sampe/), which is based on a MS GPSsample.

This time I added support for Int*rm*c CN50, which does NOT support reading raw GPS data using a serial connection. Instead the CN50 streams the data to the ‘communication’ port.

BTW: did you know how easy it is to create skins for use with MyMobiler?

The stream reader part is outsourced into a thread, which is based on my background thread class bgThread2 (see http://www.hjgode.de/wp/2010/06/01/mobile-development-easy-to-use-background-thread-with-gui-update/). It was very easy to implement the stream reading within the thread, so the GUI is not blocked during read waits.

        #region TheTHREAD
        private void myThreadStart()
        {
            System.Diagnostics.Debug.WriteLine("Entering thread proc");
            int _i=0;
            try
            {
                do
                {
                    //The blocking function...
                    char[] cSep = new char[] { '\r', '\n' };
                    int iRes = 0;
                    do
                    {
                        string sRes = "";
                        iRes = GPS_Sample8.ReadFileClass.readFile(_sCOM, ref sRes);
                        string[] sAll = sRes.Split(cSep);
                        foreach (string s1 in sAll)
                        {
                            SendData(bgWnd.Hwnd, iRes, s1);
                        }
                        //Application.DoEvents();
                        Thread.Sleep(100);
                    } while (iRes == 0);

                    System.Diagnostics.Debug.WriteLine("Thread sleeps...");
                    _i++;
                    Thread.Sleep(100);
                } while (bRunThread);
            }
            catch (ThreadAbortException)
            {
                System.Diagnostics.Debug.WriteLine("Thread will abort");
                bRunThread = false;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Exception in ThreadStart: " + ex.Message);
            }
            System.Diagnostics.Debug.WriteLine("ThreadProc ended");
        }
        #endregion

The main form code has some new functions to check for iCN50 and start/stop the stream reader background thread:

        #region CN50raw
        bgThread2 myStreamReaderThread;
        private void OpenStream()
        {
            //background thread already running?
            if (myStreamReaderThread == null)
            {
                string szPort="";
                szPort = GetGPSPort();
                if (szPort != "")
                {
                    //start a new thread
                    myStreamReaderThread = new bgThread2(szPort);
                    myStreamReaderThread.bgThread2Event += new bgThread2.bgThread2EventHandler(myStreamReaderThread_bgThread2Event);
                }
                else
                    AddRawText("No raw GPS port found");
            }
        }

        void myStreamReaderThread_bgThread2Event(object sender, bgThread2.BgThreadEventArgs bte)
        {
            AddRawText(bte.sString);
        }
        private void CloseStream()
        {
            if (myStreamReaderThread != null)
            {
                myStreamReaderThread.Dispose();
                Application.DoEvents();
                myStreamReaderThread = null;
            }
            Application.DoEvents();
            mnuRAWStart.Enabled = true;
            mnuRAWStop.Enabled = false;
        }
        #endregion

NEW 12. nov. 2012: project now hosted at google!

Downloads (VS2008 solution targeting WM6 SDK):

[Download not found]

updated source as of 9. nov 2011

[Download not found]