Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#include <windows.h> #include <stdlib.h> #include <stdio.h> #define RX_SIZE 4096 #define TX_SIZE 4096 COMMTIMEOUTS cto = { 0xFFFFFFFF,// ReadIntervalTimeOut 0, // ReadTotalTimeOutMultiplier 0, // ReadTotalTimeOutConstant 0, // WriteTotalTimeOutMultiplier 0 // WriteTotalTimeOutConstant }; DCB dcb = { sizeof(DCB), // DCBlength 9600, // BaudRate TRUE, // fBinary FALSE, // fParity FALSE, // fOutxCtsFlow FALSE, // fOutxDsrFlow DTR_CONTROL_ENABLE,// fDtrControl FALSE, // fDsrSensitivity FALSE, // fTXContinueOnXoff FALSE, // fOutX FALSE, // fInX FALSE, // fErrorChar FALSE, // fNull RTS_CONTROL_ENABLE,// fRtsControl FALSE, // fAbortOnError 0, // fDummy2 0, // wReserved 0x100, // XonLim 0x100, // XoffLim 8, // ByteSize NOPARITY, // Parity ONESTOPBIT, // StopBits 0x11, // XonChar 0x13, // XoffChar '?', // ErrorChar 0x1A, // EofChar 0x10 // EvtChar }; HANDLE hComm = NULL; BOOL Setup (); BOOL Write (LPVOID, DWORD); BOOL Read (LPVOID, DWORD); BOOL WaitAnswer (DWORD, char*); BOOL Call (); BOOL HangUp (); int main(int argc, char* argv[]) { // ouverture port série hComm = CreateFile("COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL); if(hComm == INVALID_HANDLE_VALUE) { printf("CreateFile failed\r\n"); return -1; } // config if(!Setup()) return -1; if(Call()) { Sleep(20000); HangUp(); } // fermeture port série CloseHandle(hComm); return 0; } BOOL Write(LPVOID lpBuffer,DWORD dwSize) { DWORD dwWritten; WriteFile(hComm, lpBuffer, dwSize, &dwWritten, NULL); return (dwSize == dwWritten); } BOOL Read(LPVOID lpBuffer,DWORD dwSize) { DWORD dwRead; ReadFile(hComm, lpBuffer, dwSize, &dwRead, NULL); ((LPBYTE)lpBuffer)[dwRead] = '\0'; return (dwRead != 0); } BOOL Setup() { if(!SetupComm(hComm, RX_SIZE, TX_SIZE)) { printf("SetupComm failed\r\n"); return FALSE; } if(!SetCommTimeouts(hComm, &cto)) { printf("SetCommTimeouts failed\r\n"); return FALSE; } if(!SetCommState(hComm, &dcb)) { printf("SetCommState failed\r\n"); return FALSE; } PurgeComm(hComm, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT); EscapeCommFunction(hComm, SETDTR); return TRUE; } BOOL WaitAnswer(DWORD dwTime, char* szText) { char reponse[256]; // tant que le délai n'est pas expiré DWORD dwLastTime = GetTickCount(); while(GetTickCount() < dwLastTime+dwTime*1000) { // pause Sleep(100); // lire if(Read(reponse, sizeof(reponse))) { printf(reponse); if(strstr(reponse, szText) != NULL) return TRUE; } } return FALSE; } BOOL Call() { // init char szInit[] = "AT\r\n"; printf("Init -> %s", szInit); if(!Write(szInit, strlen(szInit))) return FALSE; if(!WaitAnswer(20,"OK")) { printf("\r\nEchec\r\n"); return FALSE; } // appel char szCall[] = "ATDxxxxxxxxxx\r\n"; printf("Call -> %s", szCall); if(!Write(szCall, strlen(szCall))) return FALSE; if(!WaitAnswer(20,"CONNECT")) { printf("\r\nEchec\r\n"); return FALSE; } return TRUE; } BOOL HangUp() { // +++ char* szCmd1 = "+++"; printf("HangUp -> %s\r\n", szCmd1); if(!Write(szCmd1, strlen(szCmd1))) return FALSE; // ATH char* szCmd2 = "ATH\r\n"; printf("HangUp ->%s", szCmd2); if(!Write(szCmd2, strlen(szCmd2))) return FALSE; return TRUE; }