begin process at 2012 05 29 02:00:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

comment envoyer des données sur un port série sous xp


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comment envoyer des données sur un port série sous xp

mardi 9 mars 2004 à 17:31:41 | comment envoyer des données sur un port série sous xp

tchen01

je voudrais envoyer des commandes hexadecimales sur un port série en c++ sous xp et les commandes outp et inp ne sont pas valables.


merci d'avance
mardi 9 mars 2004 à 23:09:24 | Re : comment envoyer des données sur un port série sous xp

ymca2003

utilise les API Win32 CreateFile et WriteFile :

un exemple qui fait un appel sur un modem connecté au port série :


#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;





Cette discussion est classée dans : port, données, xp, envoyer, série


Répondre à ce message

Sujets en rapport avec ce message

0x1A - CTRL+Z [ par toma2194 ] Bonjour,j'essaye de faire un prog pour envoyer des SMS via le port série sur lequel est relié un portable.En hyperterminal avec les commandes AT, pas programmation port série/ethernet [ par zbex ] je reçois des données provenant d'un capteur sur le port série et je voudrais les envoyer sur l'interface ethernet.Je voudrais avoir si quelqu'un a un Rediriger des données venant du port série sur l'entrée clavier.... [ par lecods ] Bonjour,voila mon problème.Lorsqu'on connecte un périphérique comme un lecteur de code à barre sur l'entrée clavier, lorsqu'on lit un code à barre, le port série et // [ par pepper18 ] salut à tous je fais un petit projet en C dans lequel je réceptionne des données avec un modem rs232. j'envoie ces données avec le port// sur une cart Demande d'avis sur une idée de projet [ par beral_ ] Bonjour à tous!Je voudrais votre avis quand à la possibilité de faire ce qui suit:-Sous visual C++-Application windowsJe voudrais un programme qui fas Accès direct au port série sous XP ? [ par Doum006 ] Bonjour à tous !J'essaie de communiquer avec un convertisseur analogique-numérique via un adaptateur USB->série sous Windows XP. J'avais réalisé sous lecture du port série avec c++ [ par moonalex ] Bonjour, je voudrais savoir comment je pourrais lire les données via un port série et afficher les données lues en format texte ou dans un tableur. j' Envoyer un caractère de controle en C vers un port série [ par Kurpeus1 ] Bonjour, Voila je ne suis pas un expert en C, mais j'y travaille ^^Je suis en train de programmer un programme qui communique avec un terminal portabl Importer des données du port série vers Excel [ par Nicozo77100 ] Bonjour,Je souhaite récupérer des données qui arrivent sur le port série du pc et les écrire dans un fichier excel, qqun aurait il des sources permett


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,950 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales