begin process at 2010 02 10 02:01:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > ÉVENEMENT PORT SÉRIE

ÉVENEMENT PORT SÉRIE


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :port, série, événement, asynchrone Niveau :Initié Date de création :10/04/2006 Vu / téléchargé :9 046 / 76 669

Auteur : rmaah007

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 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


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture CALENDRIER (WIN64) par BruNews
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS par racpp
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI... par racpp
Source avec Zip Source avec une capture BROUILLAGE DES FICHIERS JAVASCRIPT ET CSS(WIN32) par gagah1
Source avec Zip Source avec une capture CHANGE CURSEUR par ganjarasta

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [DEV-C++] GESTION DU PORT PARALLÈLE par victorcoasne
Source avec Zip LIAISON SERIE RS-232 par yovotsa
0X0SCAN_PORT V1 par 0x0syscall
Source avec Zip CLASSE DE CONTRÔLE DES PORTS COM par gergalp
Source avec Zip Source avec une capture CLASSE DE CONTRÔLE DU PORT SÉRIE RS232 AVEC LES API WINDOWS. par djlex03

Commentaires et avis

Commentaire de MuPuF le 10/04/2006 21:36:37

EXELENT, c'est exactement le genre de source utile en electronique, je la garde pres de moi !
Merci :->

Commentaire de kaisks le 11/04/2006 18:20:51

un code genial cela un vrai solution pourtion pour le prob.
merci

Commentaire de brunomoraut le 17/04/2006 21:23:12

Super, justement je cherchais ça !

Commentaire de CADRATURE le 18/04/2006 00:35:46

Super, je mets ça sous le coude.

Commentaire de nitrique le 24/05/2006 14:42:44

Bonjour,

T'as pas la version sans mfc car mfc_app_tele, il ne connais pas.

Merci.

Commentaire de rmaah007 le 02/06/2006 02:08:53

"mfc_app_tele.h" est le nom du projet sur le quel je travaillez, il suffit de supprimer la ligne ou il y a #include "mfc_app_tele.h", et la la remplacer par le nom de votre projet. Bonne chance !

Commentaire de nitrique le 02/06/2006 09:29:09

Oups, c'était bête.

Par contre, y a t-il moyen de se passer de BuildCommDCB et GetOverlappedResult car je travaille sous Embeddedet ces fonctions ne sont pas implémentées sous Windows CE !

Merci d'avance.

Commentaire de rmaah007 le 03/06/2006 10:50:23

Pardon mais je sais pas comment contourner ce problème sauf si vous voulez vous empassez des contrôles d'erreurs pour les deux fonctions.

Commentaire de nitrique le 03/06/2006 11:37:48

BuildCommDCB et GetOverlappedResult ne servent qu'à gérer les contrôles d'erreurs ?
Ce me surprend.

Mais oui, j'aimerais savoir comment les contourner...
(il ne suffit pas de les commenter car autrement ça pête ailleurs)

Commentaire de hilairenicolas le 26/01/2007 13:19:25

ca ressemble exactement à la meme chose qu'on voit ici : http://c.developpez.com/faq/vc/?page=NetWork#WorkWithSerialPort

meme l'adresse email visible dans le source !!

Commentaire de poueted le 17/10/2008 10:11:56

Meme que sur msdn aussi...

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales