La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation.

Présentations similaires


Présentation au sujet: "Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation."— Transcription de la présentation:

1 jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation

2 jc/md/lp-01/05Essai ligne série COM1 : corrigé2 Objectif Utiliser la ligne série de la plate-forme CEPC avec les logiciels fournis en standard par Windows CE Configurer le port série

3 jc/md/lp-01/05Essai ligne série COM1 : corrigé3 Programme à réaliser Faire un programme décho sur le deuxième port de communication Comme le premier port est pris pour le debugging, le premier port utilisable par une application est le deuxième, traditionnellement appelé COM2. En tant que premier port libre, il va sappeler COM1 dans notre application.

4 jc/md/lp-01/05Essai ligne série COM1 : corrigé4 Plan de travail Faire une plate-forme vierge : z_COM Préparation de lapplication ESSAI_COM1 –Ouverture dun port série –Modification de la configuration du port –Installation des événements de communication –Écriture dune boucle dessai –Fermeture de lapplication

5 jc/md/lp-01/05Essai ligne série COM1 : corrigé5 File New Project or File

6 jc/md/lp-01/05Essai ligne série COM1 : corrigé6 Application ESSAI_COM1 (1) Nommer Valider Choisir

7 jc/md/lp-01/05Essai ligne série COM1 : corrigé7 Application ESSAI_COM1 (2) Choisir Valider

8 jc/md/lp-01/05Essai ligne série COM1 : corrigé8 Après création du projet

9 jc/md/lp-01/05Essai ligne série COM1 : corrigé9 Configuration Platform Settings Valider Choisir

10 jc/md/lp-01/05Essai ligne série COM1 : corrigé10 Utilisation du port série standard Ouvrir le port série par la fonction CreateFile et lui attribuer un nom, par exemple COM1 Le port est configuré à partir dinformations regroupées dans une structure nommée DCB DCB est définie par un typedef dans winbase.h Constantes définies par des #define dans winbase.h Accès aux paramètres du port –Lecture : GetCommState –Écriture : SetCommState

11 jc/md/lp-01/05Essai ligne série COM1 : corrigé11 Constantes (1) // DTR Control Flow Values. #define DTR_CONTROL_DISABLE 0x00 #define DTR_CONTROL_ENABLE 0x01 #define DTR_CONTROL_HANDSHAKE 0x02 // RTS Control Flow Values #define RTS_CONTROL_DISABLE 0x00 #define RTS_CONTROL_ENABLE 0x01 #define RTS_CONTROL_HANDSHAKE 0x02 #define RTS_CONTROL_TOGGLE 0x03

12 jc/md/lp-01/05Essai ligne série COM1 : corrigé12 Constantes (2) #define NOPARITY0 #define ODDPARITY 1 #define EVENPARITY 2 #define MARKPARITY 3 #define SPACEPARITY4 #define ONESTOPBIT0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #define IGNORE 0 // Ignore signal

13 jc/md/lp-01/05Essai ligne série COM1 : corrigé13 DCB (1) typedef struct _DCB{ DWORD DCBlength; // longueur de la structure DWORD BaudRate; // vitesse de transmission DWORD fBinary:1; // TRUE: no EOF DWORD fParity:1; // FALSE: no parity DWORD fOutxCtsFlow:1; // FALSE: no CTS DWORD fOutxDsrFlow:1; // FALSE: no DSR DWORD fDtrControl:2; // DTR_CONTROL_DISABLE DWORD fDsrSensitivity:1; // FALSE: no DSR sensitive DWORD fTXContinueOnXoff:1; // TRUE: Continue // TX when Xoff sent DWORD fOutX:1; // FALSE: no XON/XOFF

14 jc/md/lp-01/05Essai ligne série COM1 : corrigé14 DCB (2) DWORD fInX:1; // FALSE: no XON/XOFF DWORD fErrorChar:1; // FALSE: no error replacement DWORD fNull:1;// FALSE: no null bytes discarded DWORD fRtsControl:2; // RTS_CONTROL_DISABLE DWORD fAbortOnError:1; // FALSE: no error abort DWORD fDummy2:17; // Reserved WORD wReserved; // must be 0 WORD XonLim; // Flow control default value WORD XoffLim; // Flow control default value BYTE ByteSize; // 8 bits BYTE Parity; // 0: non parity BYTE StopBits; // 0: one stop bit

15 jc/md/lp-01/05Essai ligne série COM1 : corrigé15 DCB (3) char XonChar; // Default value char XoffChar; // Default value char ErrorChar; // Default value char EofChar; // Default value char EvtChar; // Default value WORD wReserved1; // Default value }DCB, *LPDCB;

16 jc/md/lp-01/05Essai ligne série COM1 : corrigé16 Lecture de la configuration du port BOOL GetCommState( HANDLE hFile, LPDCB lpDCB ); Parameters hFile [in] Handle to the communication device. The CreateFile function returns this handle.CreateFile lpDCB [out] Long pointer to the DCB structure in which the control settings data is returned. Return Values Nonzero indicates success. Zero indicates failure. To obtain extended error data, call the GetLastError function.GetLastError

17 jc/md/lp-01/05Essai ligne série COM1 : corrigé17 Écriture de la configuration du port BOOL SetCommState( HANDLE hFile, LPDCB lpDCB ); Parameters hFile [in] Handle to the communications device. The CreateFile function returns this handle.CreateFile lpDCB [in] Long pointer to a DCB structure containing the configuration information for the specified communications device. Return Values Nonzero indicates success. Zero indicates failure. To obtain extended error information, call the GetLastError function.GetLastError

18 jc/md/lp-01/05Essai ligne série COM1 : corrigé18 Écriture de données (1) BOOL WriteFile (HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); Parameters hFile [in] Handle to the file to be written to. The file handle must have been created with GENERIC_WRITE access to the file. lpBuffer [in] Pointer to the buffer containing the data to write to the file.

19 jc/md/lp-01/05Essai ligne série COM1 : corrigé19 Écriture de données (2) nNumberOfBytesToWrite [in] Number of bytes to write to the file. A value of zero specifies a null write operation. A null write operation does not write any bytes but does cause the time stamp to change. WriteFile does not truncate the file. To truncate or extend a file, use the SetEndOfFile function.SetEndOfFile lpNumberOfBytesWritten [out] Pointer to the number of bytes written by this function call. WriteFile sets this value to zero before taking action or checking errors. lpOverlapped [in] Unsupported; set to NULL. Return Values Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError.GetLastError

20 jc/md/lp-01/05Essai ligne série COM1 : corrigé20 Lecture de données (1) BOOL ReadFile (HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped ); Parameters hFile [in] Handle to the file to be read. The file handle must have been created with GENERIC_READ access to the file. This parameter cannot be a socket handle. lpBuffer [out] Pointer to the buffer that receives the data read from the file.

21 jc/md/lp-01/05Essai ligne série COM1 : corrigé21 Lecture de données (2) nNumberOfBytesToRead [in] Number of bytes to be read from the file. lpNumberOfBytesRead [out] Pointer to the number of bytes read. ReadFile sets this value to zero before doing taking action or checking errors. lpOverlapped [in] Unsupported; set to NULL. Return Values Nonzero indicates success. Zero indicates failure. To get extended error information, call GetLastError.GetLastError

22 jc/md/lp-01/05Essai ligne série COM1 : corrigé22 Événements de communication Des événements « EVENTs » ont été définis pour signaler que quelque chose sest produit : break, signaux MODEM, caractère reçu, transmetteur prêt… La lecture sera en attente de lEVENT caractère reçu : EV_RXCHAR La fonction WaitCommEvent permet dattendre un événement sur le port La fonction SetCommMask permet de spécifier la nature de lévénement attendu

23 jc/md/lp-01/05Essai ligne série COM1 : corrigé23 Attente dEVENT (1) BOOL WaitCommEvent ( HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped ); Parameters hFile [in] Handle to the communications device. The CreateFile function returns this handle.CreateFile lpEvtMask [out] Long pointer to a 32-bit variable that receives a mask indicating the events that occurred. If an error occurs, the value is zero; otherwise, it is one or more of the following values. ValueDescription EV_BREAKA break was detected on input. …

24 jc/md/lp-01/05Essai ligne série COM1 : corrigé24 Attente dEVENT (2) … EV_RXCHARA character was received and placed in the input buffer. … lpOverlapped [in] Ignored; set to NULL. Return Values Nonzero indicates success. Zero indicates failure. To obtain extended error information, call the GetLastError functionGetLastError

25 jc/md/lp-01/05Essai ligne série COM1 : corrigé25 Choix de lévénement attendu (1) BOOL SetCommMask ( HANDLE hFile, DWORD dwEvtMask ); Parameters hFile [in] Handle to the communications device. The CreateFile function returns this handle.CreateFile dwEvtMask [in] Specifies the events to be enabled and immediately signals any thread waiting on the WaitCommEvent function. A value of zero disables all events.WaitCommEvent The following table shows possible values for this parameter. ValueDescription EV_BREAKA break was detected on input. …

26 jc/md/lp-01/05Essai ligne série COM1 : corrigé26 Choix de lévénement attendu (2) … EV_RXCHARA character was received and placed in the input buffer. … Return Values Nonzero indicates success. Zero indicates failure. To obtain extended error information, call the GetLastError function.GetLastError

27 jc/md/lp-01/05Essai ligne série COM1 : corrigé27 Gestion des « Time-out » Les « Time-out » sont configurés à partir dinformations regroupées dans une structure nommée COMMTIMEOUTS COMMMTIMEOUTS définie par un typedef dans winbase.h Accès aux paramètres du port –Lecture : GetCommTimeouts –Écriture : SetCommTimeouts

28 jc/md/lp-01/05Essai ligne série COM1 : corrigé28 Structure COMMTIMEOUTS typedef struct _COMMTIMEOUTS{ DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; }COMMTIMEOUTS, *LPCOMMTIMEOUTS;

29 jc/md/lp-01/05Essai ligne série COM1 : corrigé29 Paramètres des Time-out Pour la lecture on limite loverhead en mettant –ReadIntervalTimeout = MAXDWORD; –ReadTotalTimeoutMultiplier = 0; –ReadTotalTimeoutConstant = 0; Pour lécriture on prend une marge de sécurité par rapport a la vitesse de transmission –WriteTotalTimeoutMultiplier = 10; –WriteTotalTimeoutConstant = 1000;

30 jc/md/lp-01/05Essai ligne série COM1 : corrigé30 Application

31 jc/md/lp-01/05Essai ligne série COM1 : corrigé31 Programme à réaliser Application qui utilise le port série COM1 Le programme est très simple, il doit : –Écrire un $ avec IOCTL_ PUTC –Attendre la réception dun caractère avec IOCTL_GETC –Envoyer lécho avec IOCTL_PUTC –Boucler jusquà la réception du caractère ESCAPE (0x1B) –Se terminer après la réception de ESCAPE

32 jc/md/lp-01/05Essai ligne série COM1 : corrigé32 COM1.cpp (1) #include "stdafx.h" int main(int argc,char *argv[],char *envp[]) { // Déclarations et réservations HANDLE hPort; BYTE byte=0; DWORD dwCom,dwBytes; DCB PortDCB; COMMTIMEOUTS CommTimeouts;

33 jc/md/lp-01/05Essai ligne série COM1 : corrigé33 COM1.cpp (2) // Ouverture du port série hPort=CreateFile(_T("COM1:"),GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); // Traitement de l'erreur if(hPort==INVALID_HANDLE_VALUE) { printf("Erreur lors de l'ouverture du port\n"); return 0; }

34 jc/md/lp-01/05Essai ligne série COM1 : corrigé34 COM1.cpp (3) // Message de bienvenue printf("Début de ESSAI_COM1.cpp\n"); // Récupération des paramètres du port if(!GetCommState(hPort,&PortDCB)) { CloseHandle(hPort); printf("Erreur lors de GetCommState\n"); return 0; }

35 jc/md/lp-01/05Essai ligne série COM1 : corrigé35 COM1.cpp (4) // Modifications des paramètres du port PortDCB.BaudRate = 9600; PortDCB.fBinary = TRUE; PortDCB.fParity = FALSE; PortDCB.fOutxCtsFlow = FALSE; PortDCB.fOutxDsrFlow = FALSE; PortDCB.fDtrControl = DTR_CONTROL_DISABLE; PortDCB.fDsrSensitivity = FALSE; PortDCB.fTXContinueOnXoff = TRUE;

36 jc/md/lp-01/05Essai ligne série COM1 : corrigé36 COM1.cpp (5) PortDCB.fOutX = FALSE; PortDCB.fInX = FALSE; PortDCB.fErrorChar = FALSE; PortDCB.fNull = FALSE; PortDCB.fRtsControl = RTS_CONTROL_DISABLE; PortDCB.fAbortOnError = FALSE; PortDCB.ByteSize = 8; PortDCB.Parity = NOPARITY; PortDCB.StopBits = ONESTOPBIT;

37 jc/md/lp-01/05Essai ligne série COM1 : corrigé37 COM1.cpp (6) // Écriture des nouveaux paramètres du port if(!SetCommState(hPort,&PortDCB)) { CloseHandle(hPort); printf("Erreur lors de SetCommState\n"); return 0; }

38 jc/md/lp-01/05Essai ligne série COM1 : corrigé38 COM1.cpp (7) // Lecture des paramètres de time-out if (!GetCommTimeouts(hPort,&CommTimeouts)) { CloseHandle(hPort); printf("Erreur lors de GetCommTimeouts\n"); return 0; } // Modification des paramètres de time-out CommTimeouts.ReadIntervalTimeout = MAXDWORD; CommTimeouts.ReadTotalTimeoutMultiplier = 0;

39 jc/md/lp-01/05Essai ligne série COM1 : corrigé39 COM1.cpp (8) CommTimeouts.ReadTotalTimeoutConstant = 0; CommTimeouts.WriteTotalTimeoutMultiplier = 10; CommTimeouts.WriteTotalTimeoutConstant = 1000; // Écriture des nouveaux paramètres de time-out if(!SetCommTimeouts(hPort,&CommTimeouts)) { CloseHandle(hPort); printf("Erreur lors de SetCommTimeouts\n"); return 0; }

40 jc/md/lp-01/05Essai ligne série COM1 : corrigé40 COM1.cpp (9) // Spécification de l'événement attendu if(!SetCommMask(hPort,EV_RXCHAR)) { CloseHandle(hPort); printf("Erreur lors de SetCommMask\n"); return 0; }

41 jc/md/lp-01/05Essai ligne série COM1 : corrigé41 COM1.cpp (10) // Boucle d'écho while(byte!=0x1B) { // Attente de l'événement if(!WaitCommEvent(hPort,&dwCom,NULL)) { CloseHandle(hPort); printf("Erreur lors de WaitCommEven\n"); return 0; }

42 jc/md/lp-01/05Essai ligne série COM1 : corrigé42 COM1.cpp (11) // Réarmement de l'événement if(!SetCommMask(hPort,EV_RXCHAR)) { CloseHandle(hPort); printf("Erreur lors de SetCommMask\n"); return 0; }

43 jc/md/lp-01/05Essai ligne série COM1 : corrigé43 COM1.cpp (12) // Lecture et écho du caractère { ReadFile(hPort,&byte,1,&dwBytes,NULL); WriteFile(hPort,&byte,1,&dwBytes,NULL); } }// Fin while

44 jc/md/lp-01/05Essai ligne série COM1 : corrigé44 COM1.cpp (13) // Fermeture du handle CloseHandle(hPort); printf("Fin de ESSAI_COM1.cpp\n"); return 0; }// Fin main

45 jc/md/lp-01/05Essai ligne série COM1 : corrigé45 Test Télécharger le noyau Exécuter lapplication Vérifier le fonctionnement

46 jc/md/lp-01/05Essai ligne série COM1 : corrigé46 Conclusion Sur un exemple simple, nous avons appris à utiliser des fonctions proposées par Windows CE pour modifier les caractéristiques de fonctionnement dun périphérique –Caractéristiques physiques du port –Caractéristiques des événements associés à la gestion des échanges


Télécharger ppt "Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation."

Présentations similaires


Annonces Google