#include "stdafx.h"
#include <windows.h>
#include <commctrl.h>
#include <Winbase.h>
int _tmain(int argc, _TCHAR* argv[])
{
// Déclaration de notre instance pour accueillir l'accès au port série
HANDLE hPort;
//Nom du port série auquel on veut accéder
LPCWSTR lpszPortName = _T("COM6:");
//Open the serial port.
hPort = CreateFile (
lpszPortName, //Pointer to the name of the port
GENERIC_READ | GENERIC_WRITE, //accès en lecture ou en écriture
0, //Share mode
NULL, //Pointer to the security attribute
OPEN_EXISTING, //Cela indique que l'instance sera créée
//à condition que le port de
//communication demandé existe
//et donc est connu de l'OS
0, //Port attributes
NULL); //Handle to port with
//attribute to copy
//vérification sur la création de l'instance
if ( hPort == INVALID_HANDLE_VALUE )
{
}
typedef struct _DCB { //dcb
DWORD DCBlength; //sizeof(DCB)
DWORD BaudRate; //current baud rate
DWORD fBinary: 1; //binary mode, no EOF check
DWORD fParity: 1; //enable parity checking
DWORD fOutxCtsFlow:1; //CTS output flow control
DWORD fOutxDsrFlow:1; //DSR output flow control
DWORD fDtrControl:2; //DTR flow control type
DWORD fDsrSensitivity:1; // DSR sensitivity
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX: 1; //XON/XOFF out flow control
DWORD fInX: 1; //XON/XOFF in flow control
DWORD fErrorChar: 1; //enable error replacement
DWORD fNull: 1; //enable null stripping
DWORD fRtsControl:2; //RTS flow control
DWORD fAbortOnError:1; //abort reads/writes on error
DWORD fDummy2:17; //reserved
WORD wReserved; //not currently used
WORD XonLim; //transmit XON threshold
WORD XoffLim; //transmit XOFF threshold
BYTE ByteSize; //number of bits/byte, 4-8
BYTE Parity; //0-4=no,odd,even,mark,space
BYTE StopBits; //0,1,2 = 1, 1.5, 2
char XonChar; //Tx and Rx XON character
char XoffChar; //Tx and Rx XOFF character
char ErrorChar; //error replacement character
char EofChar; //end of input character
char EvtChar; //received event character
WORD wReserved1; //reserved; do not use
} DCB;
LPDCB PortDCB;
//Récupération des informations enregistées du port série dans votre structure.
GetCommState (hPort, // instance d'accès de votre port série
PortDCB); // Structure de configuration
// mise à jour de la structure
PortDCB->DCBlength = sizeof (DCB);
PortDCB->BaudRate = 9600;
PortDCB->fBinary = TRUE;
PortDCB->fParity = TRUE;
PortDCB->fOutxCtsFlow = FALSE;
PortDCB->fOutxDsrFlow = FALSE;
PortDCB->fDtrControl = DTR_CONTROL_ENABLE;
PortDCB->fDsrSensitivity = FALSE;
PortDCB->fTXContinueOnXoff = TRUE;
PortDCB->fOutX = FALSE;
PortDCB->fInX = FALSE;
PortDCB->fErrorChar = FALSE;
PortDCB->fNull = FALSE;
PortDCB->fRtsControl = RTS_CONTROL_ENABLE;
PortDCB->fAbortOnError = FALSE;
PortDCB->ByteSize = 8;
PortDCB->Parity = NOPARITY;
PortDCB->StopBits = ONESTOPBIT;
//Renvoie des nouvelles informations dans le registre de votre port série
if (!SetCommState (hPort, PortDCB))
{
}
BYTE Byte;
DWORD dwCommStatus; // variable de stockage pour les évènements
DWORD dwBytesTransferred;
//Cette fonction définit les évènements pour lesquels
//ont va réagir par rapport à notre instance
SetCommMask (hPort,
EV_RXCHAR ); //ici EV_RXCHAR indique que l'on va détecter la réception
//de données (cette entrée est de type DWORD)
//Cette fonction est bloquante, elle va attendre
//des événements définit par le mask et
//Elle stockera le type d'événement qui l'aura réveillée dans une variable.
WaitCommEvent (hPort, //instance d'accès du port série
&dwCommStatus, //Pointeur sur la variable de stockage pour les évènements
//Cette entrée est de type LPDWORD
0); //pointeur sur la structure d'overlapped.
//Ici il n'y en a pas.
//cette entrée est de type LPOVERLAPPED
//Cette fonction permet la lecture du buffer d'entrée du port série
ReadFile (hPort, //Instance sur l'accès du port série
&Byte, //Conteneur pour récupérer le byte lu
1, //Nombre de byte à lire
&dwBytesTransferred, //Pointer sur le nombre de byte lu, sert à
//la gestion propre de la fonction read.
0); //Doit être NULL pour Windows CE
TCHAR szBuffer[20];
swprintf (szBuffer, TEXT("Donnee lu : %c"), Byte);
// affiche le byte lu
MessageBox(NULL, szBuffer, TEXT("iPaqDev"), MB_OK );
return 0;
}
Partager