Search code examples
c#visual-studio-2008windows-ceserial-port

Windows CE and serial port problems (can't open port)


I'm trying to write a custom application for a GPS device, and I need to read the GPS data.

The problem I'm facing is that I cannot open the GPS port. I know which COM it is, and I know the baud rate, but I get an IOException whenever I get to the Open() method.

port = new SerialPort("COM6", 9600);
port.ErrorReceived += new SerialErrorReceivedEventHandler(port_ErrorReceived);
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
try
{
    port.Open();
}
catch (IOException ex)
{
    SetLabel(label1, ex.Message);
}

Stack trace:

at System.IO.Ports.SerialStream.WinIOError(Int32 errorCode, String str)
at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
at System.IO.Ports.SerialPort.Open()
at PortTest.Form1.button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.ButtonBase.WnProc(WM wm, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Control._InternalWnProc(WM wm, Int32 wParam, Int32 lParam)
at Microsoft.AGL.Forms.EVL.EnterMainLoop(IntPtr hwnMain)
at System.Windows.Forms.Application.Run(Form fm)
at PortTest.Program.Main()

What makes matters quite infuriating is that a sample native C++ codes that I found DOES work, opens the port without problems, and I could even glance at some of the NMEA strings. But this was all done using sample C++ codes provided around the Web, and I don't feel proficient enough to base my entire application in this language. I'd like to stick to C#.

Are there any other ways to open a port in C# using the SerialPort class in Windows CE? Or perhaps using other classes entirely?
If not, is there perhaps a C++ written DLL that allows the same (or similar) functionality available for Windows CE?

EDIT (for more details): The exception I get is just that. IOException. The Visual Studio debugger tells me nothing more. I don't know if this is due to some botched Windows CE setting on the device. I DO remember a problem with exception strings on my Windows Mobile device, but that was solved by adding a reference to System.SR, which I already tried in this case. If there's some trick I'm missing with regards to Windows CE and exception messages, I'd love to know too. ;)

I've also tried to use the code without events and by specifying more parameters in the constructor, and I'd always get the exception when trying to open the port.

Finally, I've already tried adding a : to the port name, which also didn't help.


Solution

  • None of the suggested solutions worked. That one part remained "unopenable". We got around the issue through a C++ written native DLL which opens the port and read data from it.

    This solution is hardly ideal, but it's the best we managed to come up with.

    This is a rather "long" walkaround, and suggests that something is wrong with Compact Framework in this particular case.