I have tried com0com on Windows XP Pro SP2.
Basic functionality (data transfer between the two virtual ports) works fine.
Anyway it does not seem to support two features which I need sometimes.
The first one is baud rate emulation. If I use a null modem cable to connect two real serial ports, and set the two ports to run at 2400 bps, data transfer is 4 times slower than when I use 9600 bps, as expected. On the contrary, when using com0com, the baud rate setting does not seem to make a difference: data is always transferred at the same speed.
The second one is hardware flow control (RTS/CTS).
I have a test application (App_A) which receives data on a serial port, using a small input buffer, and sleeps (using the Windows API call Sleep) for 2 seconds after every receive event. I have another application (App_B) which sends data to App_A, and monitors the CTS signal. The purpose of the two apps is to verify RTS/CTS management.
When I set App_A and App_B to work at 57600bps, and try to transmit a 40 kB text file from B to A, App_A gets its buffer full before it can read all data coming from App_B, so it needs to set its RTS line to 0 to avoid buffer overflow. App_B then detects the change on its CTS line (which corresponds to A's RTS). App_A sets RTS back to 1 when it is ready to receive more data.
When I run the transfer using two real serial ports, I can see that App_B detects the changes on the CTS line when App_A's buffer is full and stops until App_A is ready to receive again. When I use the virtual com0com port pair, App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40). Also, with the real serial ports App_A notifies me when there is a buffer overflow, while this does not happen with the virtual ports.
I would like to know if you plan to implement support for these features in the near future.
Thanks for your work.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
The baud rate emulation now implemented in CVS version.
> App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40).
It's a strange issue because the buffer overflow emulation is not implemented yet.The virtual port pair works like a pipe. If App_A's port gets its receive buffer full the com0com suspends write requests from App_B till App_A reads some data.So all data sent (and examined) by App_B should be received by App_A w/o lost.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
>> App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40).
> It's a strange issue because the buffer overflow emulation is not implemented yet.The virtual port pair works like a pipe. If App_A's port gets its receive buffer full the com0com suspends write requests from App_B till App_A reads some data.So all data sent (and examined) by App_B should be received by App_A w/o lost.
I installed v.1.3.0.0 and it behaves as you say (no more overflows). Actually after this test I tried uninstalling, rebooting and installing 1.2.0.0 again, and even with that version there were no overflows.
Don't know what was causing that behavior before. Anyway, it seems solved now.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello,
I have tried com0com on Windows XP Pro SP2.
Basic functionality (data transfer between the two virtual ports) works fine.
Anyway it does not seem to support two features which I need sometimes.
The first one is baud rate emulation. If I use a null modem cable to connect two real serial ports, and set the two ports to run at 2400 bps, data transfer is 4 times slower than when I use 9600 bps, as expected. On the contrary, when using com0com, the baud rate setting does not seem to make a difference: data is always transferred at the same speed.
The second one is hardware flow control (RTS/CTS).
I have a test application (App_A) which receives data on a serial port, using a small input buffer, and sleeps (using the Windows API call Sleep) for 2 seconds after every receive event. I have another application (App_B) which sends data to App_A, and monitors the CTS signal. The purpose of the two apps is to verify RTS/CTS management.
When I set App_A and App_B to work at 57600bps, and try to transmit a 40 kB text file from B to A, App_A gets its buffer full before it can read all data coming from App_B, so it needs to set its RTS line to 0 to avoid buffer overflow. App_B then detects the change on its CTS line (which corresponds to A's RTS). App_A sets RTS back to 1 when it is ready to receive more data.
When I run the transfer using two real serial ports, I can see that App_B detects the changes on the CTS line when App_A's buffer is full and stops until App_A is ready to receive again. When I use the virtual com0com port pair, App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40). Also, with the real serial ports App_A notifies me when there is a buffer overflow, while this does not happen with the virtual ports.
I would like to know if you plan to implement support for these features in the near future.
Thanks for your work.
I plan to implement support for these features in the future. I'm not sure that it will be in the near future.
The baud rate emulation now implemented in CVS version.
> App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40).
It's a strange issue because the buffer overflow emulation is not implemented yet.The virtual port pair works like a pipe. If App_A's port gets its receive buffer full the com0com suspends write requests from App_B till App_A reads some data.So all data sent (and examined) by App_B should be received by App_A w/o lost.
>> App_B does not detect any change in the CTS signal; so it continues to send data, and App_A has large buffer overflows (in fact at the end of transfer the received file is only 18kB instead of 40).
> It's a strange issue because the buffer overflow emulation is not implemented yet.The virtual port pair works like a pipe. If App_A's port gets its receive buffer full the com0com suspends write requests from App_B till App_A reads some data.So all data sent (and examined) by App_B should be received by App_A w/o lost.
I installed v.1.3.0.0 and it behaves as you say (no more overflows). Actually after this test I tried uninstalling, rebooting and installing 1.2.0.0 again, and even with that version there were no overflows.
Don't know what was causing that behavior before. Anyway, it seems solved now.