2 #include "__serial.h"
\r
4 HANDLE SerialPort = NULL; // Handle of SerialPort itself.
\r
6 BOOL SerialOpen(int port, int baud)
\r
14 sprintf(str, "\\\\.\\COM%d", port);
\r
16 sprintf(str, "COM%d", port);
\r
18 // Open the serial port
\r
19 if ((Comport = CreateFile(str, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
\r
22 // Configure Serial port (Setup Comm)
\r
25 if (!SetupComm(Comport, 128, 128))
\r
28 // Setup DCB using current values
\r
29 if (!GetCommState(Comport, &myDCB))
\r
32 myDCB.fInX = FALSE; // Turn off xon/xoff handler
\r
33 myDCB.fOutX = FALSE;
\r
34 myDCB.fOutxDsrFlow = FALSE;
\r
35 myDCB.fOutxCtsFlow = FALSE; // no hardware flow control.
\r
36 myDCB.BaudRate = baud;
\r
37 myDCB.DCBlength = sizeof(DCB);
\r
40 myDCB.fDtrControl = DTR_CONTROL_DISABLE;
\r
41 myDCB.fDsrSensitivity = 0;
\r
42 myDCB.fTXContinueOnXoff = 1;
\r
44 myDCB.fRtsControl = RTS_CONTROL_DISABLE;
\r
46 myDCB.wReserved = 0;
\r
47 myDCB.Parity = NOPARITY;
\r
48 myDCB.StopBits = ONESTOPBIT;
\r
49 myDCB.wReserved1 = 0;
\r
52 if (!SetCommState(Comport, &myDCB))
\r
56 CTout.ReadIntervalTimeout = 0xffffffff;
\r
57 CTout.ReadTotalTimeoutMultiplier = 0;
\r
58 CTout.ReadTotalTimeoutConstant = 0;
\r
59 CTout.WriteTotalTimeoutMultiplier = 0;
\r
60 CTout.WriteTotalTimeoutConstant = 5000; // don't hang if CTS is locked, for example
\r
62 SetCommTimeouts(Comport, &CTout);
\r
63 EscapeCommFunction(Comport, SETDTR);
\r
64 PurgeComm(Comport, PURGE_TXCLEAR | PURGE_RXCLEAR);
\r
66 SerialPort = Comport;
\r
71 void SerialClose(void)
\r
73 if (SerialPort == NULL) return;
\r
75 PurgeComm(SerialPort, PURGE_TXCLEAR | PURGE_RXCLEAR);
\r
76 CloseHandle(SerialPort);
\r
81 BOOL SerialSendChar(int c)
\r
84 if(WriteFile(SerialPort, &c, 1, (LPDWORD)&cr, NULL) && cr)
\r
90 int SerialIsOpen(void)
\r
92 return (SerialPort != NULL);
\r
95 int SerialGetChar(void)
\r
99 if (SerialPort != NULL) {
\r
100 if (ReadFile(SerialPort, &ch, 1, (LPDWORD)&cr, NULL) && cr)
\r
106 void SendCmd(uint8 *cmd, int size)
\r
109 for(i=0; i<size; i++) {
\r
110 SerialSendChar(cmd[i]);
\r
114 int ReadResp(uint8 *resp, int size)
\r
116 int i = 0, sum = 0, data;
\r
118 while ((data = SerialGetChar()) == EOF) {}
\r
119 resp[i] = data & 0xff;
\r
120 sum += (data & 0xff);
\r