开发者

COM port communication with Virtual PC (part 2)

This question is related to my earlier question.

Connecting to the pipe is now successful, but I still cannot read (or write) any data from the port.

My first guess was, that the data are buffered. But even when I write (on the client site) 5000 bytes (the buffer in NamedPipeClientStream is 512 byte large), I do not receive any data.

开发者_如何学编程

PipeOptions.WriteThrough didn't changed anything, too.

When I do not use a pipe, but a textfile (in the Virtual-PC settings) to redirect the data written to the COM-Port, the data are written as expected to the textfile. So the client test programm, running in Virtual-PC, is doing fine. The problem is likely in my code below.

var pipe = new NamedPipeClientStream(".", "mypipe", PipeDirection.InOut, PipeOptions.WriteThrough);

pipe.Connect();

// this is blocking
int i = pipe.ReadByte();

var reader = new StreamReader(pipe);
// this is blocking, too
var s = reader.ReadLine();

Update:

The code I am running on the guest os:

var port = new SerialPort("COM1");
port.Open();

port.WriteLine("Hallo");

Using 'echo' in an command prompt as telewin suggested works fine. What is the difference between echoing and using the above code?


Sorry for the late reply, hope it's still relevant...

In my tests, "echo hello > com1" only works before you run your program (which initiates a new SerialPort) inside VPC. After you run it, "echo hello > com1" will no longer be seen by the host program, until the guest is rebooted.

This suggests that the initialization of the SerialPort itself does something permanent. Using Reflector we find that SerialPort's ctor does nothing of consequence, but its Open method calls the ctor for SerialStream. This ctor does quite a bit: it sets read/write buffers, Rts/Dtr, and handshake mode. After some trials, it seems that the Rts/Dtr screw up the "echo hello > com1". Can you please try this modified code inside VPC:

var port = new SerialPort("com1");
port.DtrEnable = true;
port.RtsEnable = true;
port.Open();
port.WriteLine("Hallo");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜