jc/md/lp-01/05essai ligne série com1 : présentation1 essai ligne série cepc application écho sur...

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

Upload: eustache-corre

Post on 03-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

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

jc/md/lp-01/05 Essai ligne série COM1 : présentation 1

Essai ligne série CEPC

Application écho sur COM1

Présentation

Page 2: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 3: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.

Page 4: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 5: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 5

File → New Project or File

Page 6: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 6

Application ESSAI_COM1 (1)

Nommer

Valider

Choisir

Page 7: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 7

Application ESSAI_COM1 (2)

Choisir

Valider

Page 8: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 8

Après création du projet

Page 9: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 9

Configuration Platform → Settings

ValiderChoisirChoisir

Page 10: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 11: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 12: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 13: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 14: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 15: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 15

DCB (3)

char XonChar; // Default valuechar XoffChar; // Default valuechar ErrorChar; // Default valuechar EofChar; // Default valuechar EvtChar; // Default valueWORD wReserved1; // Default value

}DCB, *LPDCB;

Page 16: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 16

Lecture de la configuration du port

BOOL GetCommState( HANDLE hFile, LPDCB lpDCB );

ParametershFile

[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.

Page 17: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.

Page 18: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.

Page 19: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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 ValuesNonzero indicates success. Zero indicates failure. To get extended

error information, call GetLastError.

Page 20: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.

Page 21: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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 ValuesNonzero indicates success. Zero indicates failure. To get extended

error information, call GetLastError.

Page 22: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 23: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 23

Attente d’EVENT (1)

BOOL WaitCommEvent( HANDLE hFile, LPDWORD lpEvtMask, LPOVERLAPPED lpOverlapped );

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.

Page 24: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 25: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.…

Page 26: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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.

Page 27: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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

Page 28: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 28

Structure COMMTIMEOUTS

• typedef struct _COMMTIMEOUTS{DWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutConstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutConstant;

}COMMTIMEOUTS, *LPCOMMTIMEOUTS;

Page 29: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 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;

Page 30: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 30

Application

Page 31: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 31

Programme à réaliser

• Application qui utilise le port série COM1• Le programme est très simple, il doit :

– 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

Page 32: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 32

COM1.cpp (1)

#include "stdafx.h"

int main(int argc,char *argv[],char *envp[])

{

// TODO: Déclarations et réservations

// TODO: Ouverture du port série

// TODO: Lecture des paramètres du port

Page 33: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 33

COM1.cpp (2)

// TODO: Modifications des paramètres du port

// TODO: Écriture des nouveaux paramètres du port

// TODO: Lecture des paramètres de time-out

// TODO: Modification des paramètres de time-out

// TODO: Écriture des nouveaux paramètres de time-out

Page 34: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 34

COM1.cpp (3)

// TODO: Spécification de l'événement attendu

while(byte!=0x1B) // TODO: Boucle lecture et écho { // TODO: Attente de l'événement

// TODO: Réarmement de l'événement // TODO: Lecture du caractère

// TODO: Envoi de l’écho }// Fin while

Page 35: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 35

COM1.cpp (4)

// TODO: Fermeture du handle

}//Fin main

Page 36: Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation

jc/md/lp-01/05 Essai ligne série COM1 : présentation 36

Conclusion

• Sur un exemple simple, nous devons utiliser des fonctions proposées par Windows CE pour modifier les caractéristiques de fonctionnement d’un périphérique, ici le port série COM1

– Caractéristiques physiques du port– Caractéristiques des événements associés à la

gestion des échanges