I am trying to control a serial port with the win32 api in C. I believe that I have caught all the critical elements, but it does not seem to work.

I am trying to control the DTR/RTS signal on the serial port in order to control an X10 device. Here is the code where I try to access the serial port.

Note: lpComPort == COM2

if ((hComm=CreateFile(lpComPort, GENERIC_READ | GENERIC_WRITE, 0, 0 , OPEN_EXISTING, 0 ,0))==INVALID_HANDLE_VALUE) {
printf("Error creating output to COM Port\n");
exit(1);
} /* endif */


if (SendSignal(ComPort, Reset, hComm)==FALSE) printf("Reset Failed\n");
flushall();
if (SendSignal(ComPort, Standby, hComm)==FALSE) printf("Standby Failed\n");
flushall();
if (SendSignal(ComPort, Header, hComm)==FALSE) printf("Header Failed\n");
flushall();
if (SendSignal(ComPort, Signal, hComm)==FALSE) printf("Signal Failed\n");
flushall();
if (SendSignal(ComPort, Footer, hComm)==FALSE) printf("Footer Failed\n");
flushall();

CloseHandle(hComm);
return 0;

} /* end MakeSignal */


int SendSignal(int ComPort, char *Signal, HANDLE Commi)
{
int i;
int k;
BOOL Result;

k=strlen(Signal);
for (i=0;i<k;i++) {
if (Signal[i]=='0') {
Result=ControlCom(0,1, Commi);
} else if (Signal[i]=='1') {
Result=ControlCom(1,0, Commi);
} else if (Signal[i]=='2') {
Result=ControlCom(0,0, Commi);
} else if (Signal[i]=='3') {
Result=ControlCom(1,1, Commi);
} /* endif */
SleepEx(3,FALSE);
} /* end for */

return Result;
} /* end SendSignal */


int ControlCom(int RTS, int DTR, HANDLE Commi)
{
DWORD dwFunction;

if (RTS==0) dwFunction=CLRRTS;
if (RTS==1) dwFunction=SETRTS;
EscapeCommFunction(Commi,dwFunction);

if (DTR==1) dwFunction=(SETDTR);
if (DTR==0) dwFunction=(CLRDTR);

return EscapeCommFunction(Commi,dwFunction);

} /* end ControlCom */