From: Xavier T. <xt...@ya...> - 2003-10-02 19:39:16
|
kevin lyda wrote: > modem_fun com1 "baud=2400 parity=E data=7 stop=1" > "at&f&c1&d3&b0&k2%c0&q0b0x4n0j1s37=6" 555-1111 Are you sure that you want an even parity and 7 bit data ? I'm not familiar with modem, but the last application that I wrote was talking to some dumb device on a COM port, and I initialized it with : "baud=9600 parity=N data=8 stop=1" Here's the related functions, note that I used overlapped I/O, so some parameters are different: static HANDLE s_hComPort = INVALID_HANDLE_VALUE; static OVERLAPPED s_ComOvl = {0}; static int CheckAndWait(LPCSTR lpMessage, DWORD dwErrorCode, HANDLE hEvent, DWORD dwTimeOut) { DWORD dwWait; if(dwErrorCode == 0) return 1; if(dwErrorCode != ERROR_IO_PENDING) Halt(lpMessage, dwErrorCode); dwWait = WaitForSingleObject(hEvent, dwTimeOut); if(dwWait == WAIT_OBJECT_0) { DWORD dwSize = 0; assert(GetOverlappedResult(s_hComPort, &s_ComOvl, &dwSize, FALSE)); assert(dwSize == 1); ResetEvent(hEvent); return 1; } if(dwWait != WAIT_TIMEOUT) { char * szMessage; szMessage = LocalAlloc(GPTR, 1024); sprintf(szMessage, "waiting for completion of %s", lpMessage); Halt(szMessage, dwWait); } return 0; } BOOL InitCommPorts(int iCom) { int i; DCB dcb; char commpath[MAX_PATH]; DWORD dwSize; ClearPorts(); sprintf(commpath, "\\\\.\\COM%d", iCom); s_hComPort = CreateFile(commpath, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); if(s_hComPort == INVALID_HANDLE_VALUE) { Halt("creating COM Port Handle", GetLastError()); } s_ComOvl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); if(!BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcb)) Halt("building COM Port Configuration", GetLastError()); if(!SetCommState(s_hComPort, &dcb)) Halt("specifying COM Port Configuration", GetLastError()); if(!SetCommMask(s_hComPort, EV_TXEMPTY|EV_RXCHAR|EV_BREAK)) Halt("specifying COM Port Event Mask", GetLastError()); } void ComPutByte(int ch) { unsigned char c = ch; DWORD dwSize = 0; int done; DEBUG(("ComPutByte(%d) called", ch)); if(!WriteFile(s_hComPort, &c, 1, &dwSize, &s_ComOvl)) { done = CheckAndWait("writing COM Port data", GetLastError(), s_ComOvl.hEvent, INFINITE); assert(done); } } int ComRead(DWORD timeout) { unsigned char c = 127; DWORD dwSize = 0/*, dwEvent */; int done = 0; if(!ReadFile(s_hComPort, &c, 1, &dwSize, &s_ComOvl)) { done = CheckAndWait("reading COM Port data", GetLastError(), s_ComOvl.hEvent, timeout); if(!done) { DEBUG(("ERROR : ComRead timed out", dwSize)); return -1; } } return c; } __________________________________ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com |