Accueil > > > ÉVENEMENT PORT SÉRIE
ÉVENEMENT PORT SÉRIE
Information sur la source
Description
J'ai vu presque tous les codes sur cppfrance qui traîte le port série, mais la gestion du port est généralement mal faite alors j'ai voulu contribuer par cette classe qui un peut plus complète en traîtant les événements du port, j'éspère que sa va aider quelqu'un ! voilà la classe comment elle est définie mais vous trouvez tous dans les fichiers
Source
- // SerialCom.h
-
- #if !defined(AFX_SERIALCOM)
- #define AFX_SERIALCOM
-
- #if _MSC_VER > 1000
- #pragma once
- #endif
-
- // _MSC_VER > 1000
-
- // Farscape-dev@Tiscali.fr : Classe Mininum gestion port série.
- // Release du 01/11/2004: Met private le constructeur de copie et l'operateur d'affectation.
- // Release du 05/05/2004 :Gestion d'un thread de reception des données
- // rajoute les fonctions suivantes:
- //
- // void SetParentNotify(CWnd *pParent){m_pParent=pParent;}
- // bool PurgeCom();
- // boolPurgeRx();
- // boolPurgeTx();
- // bool StartThread(CWnd *pParent);
- // boo lResumeThread();
- // bool StopThread();
- // bool SetTimeouts(DWORD dwRxTimeout=5000,DWORD dwTxTimeout=5000);
- // virtual void OnError(DWORD dwError);
- // bool IsRXEmpty();
- // Modifications et correction de :
- // bool WaitCommEvent(DWORD &rEvtMask);
-
- #define XON 17
- #define XOFF 19
-
- // messages à destination de la fenêtre de traitement.
-
- #define WM_CCOMRCV WM_USER+100 // réceptions sur la voie série
- #define WM_CCOMEVENT WM_USER+101 // evénements sur la voie série.
- #define WM_CCOMERROR WM_USER+102 // erreurs sur la voie série.
-
- class CCom
- {
- public:
- void ThreadEcriture();
- void EnvoiMessage(int num_message);
- CCom();
- ~CCom();
-
- // ouverture du port série
- bool PortOpen(int portnumber,long baudrate,char parity,int wordlength,int stopbits);
- // réglage vitesse ,parité ,longueur de la data et du bit de stop.
- // ex : 1 : Com1 , ’N’ :none , 8 : data 8 bits , 1 ou 2 : bit de stop
- bool PortSet(long baudrate,char parity,int wordlength,int stopbits);
-
- // Fermeture du port.
- bool PortClose();
-
- // Envoie d’une chaîne de caractères la longueur est facultative si elle se termine par ‘\0’
- bool WriteBuffer(const char *buffer,unsigned int ucount=0);
-
- // lecture d’une chaîne de caractères d’une taille donnée.
- // GetCountRead() contiendra la taille reellement lue .
- int ReadBuffer(char *buffer,unsigned int ucount);
-
- // lecture d'un charactere.
- bool ReadChar(char &rchar);
-
- // Réglage du mode de communication XON/XOFF
- bool UseXonXoff(bool bEnable=true);
-
- // Réglage du mode de communication Rts/Cts
- bool UseRtsCts(bool bEnable=true);
-
- // Réglage du mode de communication Dtr/Dsr
- bool UseDtrDsr(bool bEnable=true);
-
- // Renvoie le nombre d'octets dans le buffer de reception avant lecture
- long SizeUsedInRXBuf();
-
- // renvoie true si le buffer de reception est vide.
- bool IsRXEmpty();
-
- // Attente d’un événement fixé par SetCommMask()
- bool WaitCommEvent(DWORD &rEvtMask);
-
- // fixe la gestion des evenements sur le port serie. Voir doc MSDN : EV_RXCHAR
- bool SetCommMask(DWORD EvtMask);
-
- // recupere l'événement en cours.
- DWORD GetCommMask();
-
- // Renvoie sous forme litterale la derniere erreur rencontrée avec GetLastError()
- CString GetStringError(){return m_StrError;}
-
- // Renvoie la derniere valeur du nombre d’octets lus.
- int GetCountRead(){return m_count;}
-
- // fixe la fenetre parent pour les messages en provenance de la voie serie.
- void SetParentNotify(HWND *pParent){m_pParent=pParent;}
-
- // purge le port serie.
- bool PurgeCom();
-
- // purge la réception
- bool PurgeRx();
-
- // purge l'émission
- bool PurgeTx();
-
- // lancer le thread
- bool StartThread(HWND *pParent);
-
- // redemarre le thread
- bool ResumeThread();
-
- // stop le thread.
- bool StopThread();
-
- // réglage du timeout sur la reception et l'émission
- // Note par défaut le reglage de la voie est a 1s.
- bool SetTimeouts(DWORD dwRxTimeout=5000,DWORD dwTxTimeout=5000);
-
- // fonction appelée en cas d'erreur detectée dans le thread.
- // envoie un message à la fenetre parent.
- virtual void OnError(DWORD dwError);
-
- private:
- CCom(const CCom &rCom){ASSERT(0);}
- CCom & operator = (const CCom & arg){ASSERT(0);return *this;}
-
- protected:
-
- // thread de communication.
- static UINT Thread(LPVOID pParam);
-
- // récupération de l’erreur
- DWORD GetError();
-
- protected:
- HWND *m_pParent;
- CString m_StrError;
- DWORD m_comerr;
- HANDLE m_hCom;
- UINT m_nInputBufferSize;
- UINT m_nOutputBufferSize;
- DCB m_dcb;
- DWORD m_EventMask;
- COMMTIMEOUTS m_ComTimeouts;
- OVERLAPPED m_Ov;
- unsigned int m_count;
-
- long m_baudrate;
- char m_parity;
- int m_wordlength;
- int m_stopbits;
- CWinThread* m_pThread;
- HANDLE m_hCloseCom;
- HANDLE m_hArrayEvent[2];
- bool m_bThreadExist;
- };
- #endif
-
- // !defined(AFX_SERIALCOM)
-
- // cpp
// SerialCom.h
#if !defined(AFX_SERIALCOM)
#define AFX_SERIALCOM
#if _MSC_VER > 1000
#pragma once
#endif
// _MSC_VER > 1000
// Farscape-dev@Tiscali.fr : Classe Mininum gestion port série.
// Release du 01/11/2004: Met private le constructeur de copie et l'operateur d'affectation.
// Release du 05/05/2004 :Gestion d'un thread de reception des données
// rajoute les fonctions suivantes:
//
// void SetParentNotify(CWnd *pParent){m_pParent=pParent;}
// bool PurgeCom();
// boolPurgeRx();
// boolPurgeTx();
// bool StartThread(CWnd *pParent);
// boo lResumeThread();
// bool StopThread();
// bool SetTimeouts(DWORD dwRxTimeout=5000,DWORD dwTxTimeout=5000);
// virtual void OnError(DWORD dwError);
// bool IsRXEmpty();
// Modifications et correction de :
// bool WaitCommEvent(DWORD &rEvtMask);
#define XON 17
#define XOFF 19
// messages à destination de la fenêtre de traitement.
#define WM_CCOMRCV WM_USER+100 // réceptions sur la voie série
#define WM_CCOMEVENT WM_USER+101 // evénements sur la voie série.
#define WM_CCOMERROR WM_USER+102 // erreurs sur la voie série.
class CCom
{
public:
void ThreadEcriture();
void EnvoiMessage(int num_message);
CCom();
~CCom();
// ouverture du port série
bool PortOpen(int portnumber,long baudrate,char parity,int wordlength,int stopbits);
// réglage vitesse ,parité ,longueur de la data et du bit de stop.
// ex : 1 : Com1 , ’N’ :none , 8 : data 8 bits , 1 ou 2 : bit de stop
bool PortSet(long baudrate,char parity,int wordlength,int stopbits);
// Fermeture du port.
bool PortClose();
// Envoie d’une chaîne de caractères la longueur est facultative si elle se termine par ‘\0’
bool WriteBuffer(const char *buffer,unsigned int ucount=0);
// lecture d’une chaîne de caractères d’une taille donnée.
// GetCountRead() contiendra la taille reellement lue .
int ReadBuffer(char *buffer,unsigned int ucount);
// lecture d'un charactere.
bool ReadChar(char &rchar);
// Réglage du mode de communication XON/XOFF
bool UseXonXoff(bool bEnable=true);
// Réglage du mode de communication Rts/Cts
bool UseRtsCts(bool bEnable=true);
// Réglage du mode de communication Dtr/Dsr
bool UseDtrDsr(bool bEnable=true);
// Renvoie le nombre d'octets dans le buffer de reception avant lecture
long SizeUsedInRXBuf();
// renvoie true si le buffer de reception est vide.
bool IsRXEmpty();
// Attente d’un événement fixé par SetCommMask()
bool WaitCommEvent(DWORD &rEvtMask);
// fixe la gestion des evenements sur le port serie. Voir doc MSDN : EV_RXCHAR
bool SetCommMask(DWORD EvtMask);
// recupere l'événement en cours.
DWORD GetCommMask();
// Renvoie sous forme litterale la derniere erreur rencontrée avec GetLastError()
CString GetStringError(){return m_StrError;}
// Renvoie la derniere valeur du nombre d’octets lus.
int GetCountRead(){return m_count;}
// fixe la fenetre parent pour les messages en provenance de la voie serie.
void SetParentNotify(HWND *pParent){m_pParent=pParent;}
// purge le port serie.
bool PurgeCom();
// purge la réception
bool PurgeRx();
// purge l'émission
bool PurgeTx();
// lancer le thread
bool StartThread(HWND *pParent);
// redemarre le thread
bool ResumeThread();
// stop le thread.
bool StopThread();
// réglage du timeout sur la reception et l'émission
// Note par défaut le reglage de la voie est a 1s.
bool SetTimeouts(DWORD dwRxTimeout=5000,DWORD dwTxTimeout=5000);
// fonction appelée en cas d'erreur detectée dans le thread.
// envoie un message à la fenetre parent.
virtual void OnError(DWORD dwError);
private:
CCom(const CCom &rCom){ASSERT(0);}
CCom & operator = (const CCom & arg){ASSERT(0);return *this;}
protected:
// thread de communication.
static UINT Thread(LPVOID pParam);
// récupération de l’erreur
DWORD GetError();
protected:
HWND *m_pParent;
CString m_StrError;
DWORD m_comerr;
HANDLE m_hCom;
UINT m_nInputBufferSize;
UINT m_nOutputBufferSize;
DCB m_dcb;
DWORD m_EventMask;
COMMTIMEOUTS m_ComTimeouts;
OVERLAPPED m_Ov;
unsigned int m_count;
long m_baudrate;
char m_parity;
int m_wordlength;
int m_stopbits;
CWinThread* m_pThread;
HANDLE m_hCloseCom;
HANDLE m_hArrayEvent[2];
bool m_bThreadExist;
};
#endif
// !defined(AFX_SERIALCOM)
// cpp
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
gérer un port série en asynchrone [ par stgi02 ]
bonjour,mon application est de gérer un port série en asynchrone mais je me demande que dois-je mettre comme argument à lpOverlapped je
CreateFile et port COM supérieur à 9 [ par agremlins ]
Bonjour,J'ai une dll qui s'occupe de la connexion avec des périphériques branchés sur le port série.J'utilise La fonction CreateFi
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'o
utiliser un port USB comme un port série [ par Radium The Hammer ]
Bonjour, comme je l'ai lu dans le forum on peut utiliser un port USB par l'intermédiare d'un port série. Par exemple, quand j'utilise hyper
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 pr
trouver le numéro de port série bluetooth [ par hdaniel ]
Bonjour, Lorsque l'on créé un port virtuel bluetooth, un numéro de port lui est attribué. Ce numéro change à chaque foi
Port Série [ par Vin Gazoil ]
Salut à tous ! Voila en fait je suis étudiant en informatique, j'ai un projet à réaliser, ce projet consiste à créer un
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
fonction lire ds un port série [ par imanewin32 ]
pour réaliser la lecture ds un prog qui gére la communication atravers un port série,j'ai réalisé le codeDWORD comserie::lectport(char* e,int t){ Set
Port série [ par Rafex ]
Bonjours a tous. J'ai un peu regardé quelques post parlant de la prog port série, et je n'ai pas encore vu de liens vers des sites traitant le sujet
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|