7"使用wince 6 cf 3.5的GPS无法打开com端口

时间:2014-03-22 22:21:27

标签: compact-framework windows-ce

我正在使用vb 2008和来自system.IO.Ports.SerialPort的serialport对象连接到我设备上的com2串口以从gps读取数据。但是当我尝试打开端口窗口时会出现IO异常。我的第一个想法是,其他一些程序正在使用端口,但确实我试图打开口袋putty(COM2 :)包括冒号和所有功能和gps数据流动的端口。在设备的文档中,制造商写道:

请注意GPS虚拟串口使用,数据读取不依赖于ComState。 CbInQue,读取串行数据需要指定长度。要测试正常在Sygic,Igo8,Careland地图中,详细方法请在CommTest ReadPortThread中使用参考。

我不明白他究竟是什么意思。

我的代码在另一个Wince设备上运行,但使用wince 5.0和CF 2.0

我感谢每一个答案

2 个答案:

答案 0 :(得分:1)

您的端口名称错误。 Windows CE要求端口名称以冒号为后缀。异常消息可能告诉您找不到请求的端口名称。

将代码更改为:

mySerialPort.PortName = "COM2:"

答案 1 :(得分:0)

某些设备不提供对GPS的SerialPort访问,而是提供流式访问。尝试将GPS端口打开为文件:

您可能需要此互操作:http://code.google.com/p/win-mobile-code/source/browse/trunk/gps8/Gps8/GPS_Sample8/ReadFile.cs?r=89

然后尝试打开文件:

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

    private void OpenStream(string szPort)
    {
        //background thread already running?
        if (myStreamReaderThread == null)
        {
            if (szPort != "")
            {
                AddRawText("Start reading stream at '" + 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

上面的getGpsPort函数使用MS GPSID注册表设置来查找原始端口名称。如果您的devcice支持GPSID,则您不需要以上所有内容,并且可以使用GPSID API获取GPS的位置数据。

检查您设备的注册表:

    private string GetGPSPort()
    {
        string szStr="";
        if (Registry.GetStringValue(Registry.HKLM,
                        "System\\CurrentControlSet\\GPS Intermediate Driver\\Multiplexer",
                        "DriverInterface",
                        ref szStr)
            == 0)
        {
            return szStr;
        }
        else
        {
            if (Registry.GetStringValue(Registry.HKLM,
                "System\\CurrentControlSet\\GPS Intermediate Driver\\Drivers",
                "CurrentDriver",
                ref szStr) == 0)
            {
                string szPath = "System\\CurrentControlSet\\GPS Intermediate Driver\\Drivers\\" + szStr;
                if (Registry.GetStringValue(Registry.HKLM, szPath, "CommPort", ref szStr) == 0)
                {
                    return szStr;
                }
            }
        }
        return "";
    }

以上代码行是我的Windows Mobile(Compact Framework)GpsSample应用程序的源代码

文章:http://www.hjgode.de/wp/2010/06/11/enhanced-gps-sample-update/

代码http://code.google.com/p/win-mobile-code/source/browse/trunk/gps8/Gps8/GPS_Sample8/?r=89