1 / 46

Essai ligne série CEPC

Essai ligne série CEPC. Application écho sur COM1 Présentation. 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. Programme à réaliser. Faire un programme d’écho sur le deuxième port de communication

zanthe
Download Presentation

Essai ligne série CEPC

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Essai ligne série CEPC Application écho sur COM1 Présentation Essai 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 Essai 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 s’appeler COM1 dans notre application. Essai ligne série COM1 : corrigé

  4. Plan de travail • Faire une plate-forme vierge : z_COM • Préparation de l’application ESSAI_COM1 • Ouverture d’un port série • Modification de la configuration du port • Installation des événements de communication • Écriture d’une boucle d’essai • Fermeture de l’application Essai ligne série COM1 : corrigé

  5. File → New Project or File Essai ligne série COM1 : corrigé

  6. Application ESSAI_COM1 (1) Nommer Choisir Valider Essai ligne série COM1 : corrigé

  7. Application ESSAI_COM1 (2) Choisir Valider Essai ligne série COM1 : corrigé

  8. Après création du projet Essai ligne série COM1 : corrigé

  9. Configuration Platform → Settings Choisir Choisir Valider Essai 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 d’informations 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 Essai 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 Essai ligne série COM1 : corrigé

  12. Constantes (2) #define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define MARKPARITY 3 #define SPACEPARITY 4 #define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 #define IGNORE 0 // Ignore signal Essai ligne série COM1 : corrigé

  13. DCB (1) typedef struct _DCB{DWORD DCBlength; // longueur de la structureDWORD BaudRate; // vitesse de transmissionDWORD fBinary:1; // TRUE: no EOFDWORD fParity:1; // FALSE: no parityDWORD fOutxCtsFlow:1; // FALSE: no CTSDWORD fOutxDsrFlow:1; // FALSE: no DSRDWORD fDtrControl:2; // DTR_CONTROL_DISABLEDWORD fDsrSensitivity:1; // FALSE: no DSR sensitiveDWORD fTXContinueOnXoff:1; // TRUE: Continue // TX when Xoff sentDWORD fOutX:1; // FALSE: no XON/XOFF Essai ligne série COM1 : corrigé

  14. DCB (2) DWORD fInX:1; // FALSE: no XON/XOFF DWORD fErrorChar:1; // FALSE: no error replacementDWORD fNull:1; // FALSE: no null bytes discardedDWORD fRtsControl:2; // RTS_CONTROL_DISABLEDWORD fAbortOnError:1; // FALSE: no error abortDWORD fDummy2:17; // ReservedWORD wReserved; // must be 0WORD XonLim; // Flow control default valueWORD XoffLim; // Flow control default valueBYTE ByteSize; // 8 bitsBYTE Parity; // 0: non parityBYTE StopBits; // 0: one stop bit Essai ligne série COM1 : corrigé

  15. DCB (3) char XonChar; // Default valuechar XoffChar; // Default valuechar ErrorChar; // Default valuechar EofChar; // Default valuechar EvtChar; // Default valueWORD wReserved1; // Default value }DCB, *LPDCB; Essai 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. 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. Essai 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. 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. Essai ligne série COM1 : corrigé

  18. Écriture de données (1) BOOLWriteFile(HANDLEhFile, LPCVOIDlpBuffer, DWORDnNumberOfBytesToWrite, LPDWORDlpNumberOfBytesWritten, LPOVERLAPPEDlpOverlapped); 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. Essai 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. 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. Essai 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. Essai 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. Essai ligne série COM1 : corrigé

  22. Événements de communication • Des événements « EVENTs » ont été définis pour signaler que quelque chose s’est produit : break, signaux MODEM, caractère reçu, transmetteur prêt… • La lecture sera en attente de l’EVENT caractère reçu : EV_RXCHAR • La fonction WaitCommEvent permet d’attendre un événement sur le port • La fonction SetCommMask permet de spécifier la nature de l’événement attendu Essai ligne série COM1 : corrigé

  23. Attente d’EVENT (1) BOOLWaitCommEvent(HANDLEhFile, LPDWORDlpEvtMask, LPOVERLAPPEDlpOverlapped); Parameters hFile [in] Handle to the communications device. The CreateFile function returns this handle. 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. Value Description EV_BREAK A break was detected on input. … Essai ligne série COM1 : corrigé

  24. Attente d’EVENT (2) … EV_RXCHAR A 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 function Essai 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. 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. The following table shows possible values for this parameter.Value DescriptionEV_BREAK A break was detected on input.… Essai ligne série COM1 : corrigé

  26. Choix de l’événement attendu (2) … EV_RXCHAR A 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. Essai ligne série COM1 : corrigé

  27. Gestion des « Time-out » • Les « Time-out » sont configurés à partir d’informations 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 Essai ligne série COM1 : corrigé

  28. Structure COMMTIMEOUTS • typedef struct _COMMTIMEOUTS{ DWORD ReadIntervalTimeout; DWORD ReadTotalTimeoutMultiplier; DWORD ReadTotalTimeoutConstant; DWORD WriteTotalTimeoutMultiplier; DWORD WriteTotalTimeoutConstant; }COMMTIMEOUTS, *LPCOMMTIMEOUTS; Essai ligne série COM1 : corrigé

  29. Paramètres des Time-out • Pour la lecture on limite l’overhead 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; Essai ligne série COM1 : corrigé

  30. Application Essai 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 d’un 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 Essai 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; Essai 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; } Essai 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; } Essai 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; Essai 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; Essai 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; } Essai 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; Essai 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; } Essai 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; } Essai 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; } Essai 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; } Essai 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 Essai 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 Essai ligne série COM1 : corrigé

  45. Test • Télécharger le noyau • Exécuter l’application • Vérifier le fonctionnement Essai 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 d’un périphérique • Caractéristiques physiques du port • Caractéristiques des événements associés à la gestion des échanges Essai ligne série COM1 : corrigé

More Related