IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Re-initialiser le port serie


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut Re-initialiser le port serie
    Bonjour,

    Je travaille sur un terminal de lecture de code barre (8001 de Cipher Lab pour ne pas le citer).

    Ce terminal dispose d'une connexion serie par laquelle je transfert quantité de donnée sans probleme, seulement voila, lorsque celui ci est debrancher "sauvagement" pendant une communication, le port serie de mon pc est HS, plus moyen de relancer la moindre communication, et ce meme apres un reboot, et ce toujours, avec n'importe quel logiciel de monitoring port serie (hyper terminal...) j'obtiens toujours des caracteres non imprimables.

    Le logiciel fournit avec et qui permet de transferer un binaire dedans est ccapable de passer outre ce probleme, il reinitialise mon port serie lors du transfert du binaire. Le port est de nouveau fonctionnel avec tous les logiciels, y compris le mien.

    Malheureusement, je n'ai pas acces aux sources de ce programme pour savoir quelle ligne magique est capable de faire cela,

    j'ai essayé 150 trucs differents, rien à faire, voila mon code qui permet d'ouvrir le com, qu'y manque t il pour le reinitialiser ?

    nb: jsuis en asynchrone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    	// *****     OUVERTURE DU PORT     *****
    	m_hCom = CreateFile(	"COM1",                         // Choix du port « COMx » 
    				GENERIC_READ | GENERIC_WRITE,	// accès pour lire et écrire sur le port 
    				0,								// accès exclusif au port de COM 
    				NULL,							// sécurité par défaut 
    				OPEN_EXISTING,					//Doit être à cette valeur car se n’est pas un fichier 
    				FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, // mode synchrone asynchrone
    				NULL                          
    				);
     
    	ClearCommError(m_hCom, &dwErrors, NULL);
     
    	GetCommProperties(m_hCom, &prop);
     
     
    	err = (m_hCom == INVALID_HANDLE_VALUE) || (!SetupComm(m_hCom, 4096, 4096));
     
    	if (!err){
    		GetCommTimeouts (m_hCom, &gct);
    		gct.ReadIntervalTimeout = 0;
    		gct.ReadTotalTimeoutConstant = 0;
    		gct.ReadTotalTimeoutMultiplier = 0;
    		gct.WriteTotalTimeoutConstant = 5000;
    		gct.WriteTotalTimeoutMultiplier = 0;
    		if ( !SetCommTimeouts(m_hCom,&gct) ) err = 1;
    	}
     
     
    	if (!err){
     
    		memset(&m_Ov,0,sizeof(m_Ov));
     
    		// *****     CONFIGURATION DU PORT     *****
    		m_config.DCBlength = sizeof( DCB );
    		GetCommState(m_hCom,&m_config);
    		m_config.BaudRate = 115200;
    		m_config.fBinary = 1;
    		m_config.fParity = 0;
    		m_config.fOutxCtsFlow = 0;
    		m_config.fOutxDsrFlow = 0;
    		m_config.fDtrControl = 1;
    		m_config.fDsrSensitivity =0;
    		m_config.fTXContinueOnXoff = 0;
    		m_config.fOutX = 0;
    		m_config.fInX = 0;
    		m_config.fErrorChar = 0;
    		m_config.fNull = 0;
    		m_config.fRtsControl = 1;
    		m_config.fAbortOnError = 0;
    		m_config.fDummy2 = 0;
    		//m_config.wReserved = 0;
    		m_config.XonLim = 2048;
    		m_config.XoffLim = 512;
    		m_config.ByteSize = 8;
    		m_config.Parity = 0;
    		m_config.StopBits = 0;
    		m_config.XonChar = 0;
    		m_config.XoffChar = 0;
    		m_config.ErrorChar = 0;
    		m_config.EofChar = 0;
    		m_config.EvtChar = 0;
    		//m_config.wReserved1 = 0;
     
    		err = SetCommState(m_hCom,&m_config) == 0;
     
    		// Purge
    		if (!err){
    			PurgeComm(m_hCom, PURGE_TXABORT|PURGE_RXABORT| 
    							  PURGE_TXCLEAR|PURGE_RXCLEAR);
     
    			GetCommMask(m_hCom, &old_mask);
    			SetCommMask(m_hCom, 0);
    			SetCommMask(m_hCom, old_mask);
    		}
    	}

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Par défaut
    ok,
    desole, jai eu ma reponse depuis le fournisseur du terminal

    il s'agissait d'une reinitialisation du support du terminal, donc rien a voir avec le C++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Initialisation port serie
    Par vtk37 dans le forum Débuter
    Réponses: 1
    Dernier message: 20/05/2009, 17h09
  2. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29
  3. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  4. [TP] port série rs232
    Par cyb33 dans le forum Turbo Pascal
    Réponses: 44
    Dernier message: 13/01/2003, 15h49
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo