begin process at 2010 02 10 02:00:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

port Com >10


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

port Com >10

samedi 2 avril 2005 à 11:30:09 | port Com >10

keerigan

Bonjour ,

j'ai une application qui doit utiliser plus de 10 ports series a la fois.
Or quand j'essaie d'ouvrir un port com superieur a 10 la fonction createfilemapping ne me retourne pas un handle valide.
ca fonctionne tres bien pour les port 1 a 9 :'(

j'ai recup des sources a droite a gauche sur des ouverture port com et ca donne la meme erreur.

est ce que quelqu'un peut m'aider la dessus ?

merci d'avance

Stéphane
samedi 2 avril 2005 à 12:08:15 | Re : port Com >10

Ayato

si tu est sous VC++
Essayé avec l'ActiveX Mscomm de Windows, il doit pouvoir gère tout les port serie de ton PC.


exemple de windows : VCTERM
samedi 2 avril 2005 à 12:08:54 | Re : port Com >10

Ayato

j'ai oubllier le lien :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcsample/html/_sample_mfc_vcterm.asp
samedi 2 avril 2005 à 15:36:30 | Re : port Com >10

keerigan

j'ai essaye avec vcterm et ca ne fonctionne toujours pas

je ne sais vraiment plus quoi faire

merci

Stéphane
samedi 2 avril 2005 à 17:22:37 | Re : port Com >10

keerigan

petit complement d'info je ne peux pas depasse le port 10 tout se
passe comme si il y avait un depassement de variable mais je ne comprends
vraiment pas ou

je risque ma place sur ce coup la :(

merci
lundi 4 avril 2005 à 09:17:03 | Re : port Com >10

angsthase

Pöurrais tu envoyer ta source ( Keerigan ) pour commu,iquer avec tes ports com ( jusqu'a 9) ??? stp ?


AngstHase
lundi 4 avril 2005 à 09:42:33 | Re : port Com >10

ymca2003

Réponse acceptée !
pour ouvrir le port essaye avec
CreateFile("\\\\.\\COM10", ...)
au lieu de
CreateFile("COM10", ...)

lundi 4 avril 2005 à 10:21:43 | Re : port Com >10

angsthase

ymca2003, peut tu mettre tout le code pour ouvrir un port com ?????

( compatible linux) stp

AngstHase
lundi 4 avril 2005 à 12:15:49 | Re : port Com >10

ymca2003

Ce que je t'ai mis c'est pour Windows (cf mes sources pour l'exemple base).
Pour linux, aucune idée...
lundi 4 avril 2005 à 14:10:49 | Re : port Com >10

keerigan

UHUH

excellent ca fonctionne avec le   \\\\.\\  mille merci

vous m'otez un grosse épine du pied



merci beaucoup :)

sinon mon code , assez spec a mon applicatif est le suivant (désolé il est un peu fouillit mais j'ai un peu tester tout lol )



BOOL CMyComPort::Open(TABPORT *ptpPortConfig, DWORD dwMode, BOOL ModeOverlapped) {
 TCHAR    szPort[ 15 ];
 BOOL       fRetVal ;
 HCURSOR    hOldCursor, hWaitCursor ;
 //HMENU      hMenu ;

 //HANDLE        hCommWatchThread ;
 //DWORD         dwThreadID ;
 COMMTIMEOUTS  CommTimeOuts ;
 BYTE       bSet ;
 DCB        dcb ;

 if ( ptpPortConfig->sNumber[0] == '\0' || ptpPortConfig->sNumber == NULL )
      return ( FALSE ) ;

/*
 if (fInUsed) {
  return(FALSE);
 }
*/
 // Test si déjà utilisé dans l'appli
 switch (IsInListUsed(ptpPortConfig->sNumber,dwMode)) {
  case USEDOK:
   // Mise a jour Port
   Port=ptpPortConfig;
   ListPortUsed.AddTail(*Port);
   idComDev=tpComSystem[IntPort(ptpPortConfig->sNumber)].idComDev;
   return (TRUE);
   break;
  case USEDNOK:
   return (FALSE);
   break;
  case NOUSED:
   break;
 }

 fModeOverlapped = ModeOverlapped;


 // show the hourglass cursor
 hWaitCursor = LoadCursor( NULL, IDC_WAIT ) ;
 hOldCursor = SetCursor( hWaitCursor ) ;

 // Si N°de port > MAXPORT => Erreur

 if (atoi(ptpPortConfig->sNumber) > MAXPORTS) {
  return (FALSE) ;
 }
 else
 {
  // load the COM prefix string and append port number
  
//  LoadString( AfxGetInstanceHandle( ), IDS_COMPREFIX,
//     szTemp, sizeof( szTemp ) ) ;

  if (atoi(ptpPortConfig->sNumber)<10)
   wsprintf( szPort, "COM%s", ptpPortConfig->sNumber ) ;
  else
   wsprintf( szPort, "\\\\.\\COM%s", ptpPortConfig->sNumber ) ;
 }

   // open COMM device

   if (( idComDev =
  CreateFile( szPort, GENERIC_READ | GENERIC_WRITE,
                  0,                    // exclusive access
                  NULL,                 // no security attrs
                  OPEN_EXISTING,
                  FILE_ATTRIBUTE_NORMAL |
       (ModeOverlapped?FILE_FLAG_OVERLAPPED:0), // overlapped I/O
       NULL )) == (HANDLE) -1 )
   {
  idComDev=NULL;
  CString StrTemp;
  StrTemp.Format( "Impossible d'ouvrir port de communication %s", szPort);
  TraceErreur( StrTemp.GetBuffer(0));
  return ( FALSE ) ;
   }
 else
 {
  // get any early notifications

  //SetCommMask( idComDev, EV_RXCHAR ) ;

  // setup device buffers

  SetupComm( idComDev, 4096, 4096 ) ;

  // purge any information in the buffer

//  PurgeComm( idComDev, PURGE_TXABORT | PURGE_RXABORT |
  //                       PURGE_TXCLEAR | PURGE_RXCLEAR ) ;

  // set up for overlapped I/O
  
  CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
  CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
  CommTimeOuts.ReadTotalTimeoutConstant = 5 ;
  CommTimeOuts.WriteTotalTimeoutMultiplier = 2;//NT 2;//0;
  CommTimeOuts.WriteTotalTimeoutConstant = 10; //NT 10; //5 ;
  SetCommTimeouts( idComDev, &CommTimeOuts ) ;
 }

 //fRetVal = SetupConnection( hWnd ) ;

 dcb.DCBlength = sizeof( DCB ) ;

 GetCommState( idComDev, &dcb ) ;

 dcb.BaudRate = ptpPortConfig->dwBaud ;
 dcb.ByteSize = ptpPortConfig->bData;
 dcb.Parity = ptpPortConfig-> bParity ;
 dcb.StopBits = ptpPortConfig->bStop ;

 // setup hardware flow control

 bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_DTRDSR) != 0) ;
 dcb.fOutxDsrFlow = bSet ;
 if (bSet)
  dcb.fDtrControl = DTR_CONTROL_HANDSHAKE ;
 else
  dcb.fDtrControl = DTR_CONTROL_ENABLE ;

 bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_RTSCTS) != 0) ;
 dcb.fOutxCtsFlow = bSet ;
 if (bSet)
  dcb.fRtsControl = RTS_CONTROL_HANDSHAKE ;
 else
  dcb.fRtsControl = RTS_CONTROL_ENABLE ;

 // setup software flow control

 bSet = (BYTE) ((ptpPortConfig->dwHandShake & FC_XONXOFF) != 0) ;

 dcb.fInX = dcb.fOutX = bSet ;
 dcb.XonChar = ASCII_XON ;
 dcb.XoffChar = ASCII_XOFF ;
 dcb.XonLim = 100 ;
 dcb.XoffLim = 100 ;

 // other various settings

 dcb.fBinary = TRUE ;
 dcb.fParity = TRUE ;

 fRetVal = SetCommState( idComDev, &dcb ) ;

 if (fRetVal)
 {
  fInUsed = TRUE ;

  // Mise à jour de la configuration
  Port=ptpPortConfig;
  Port->dwType=dwMode;
  // Enregistrement dans la liste des ports utilisés
  ListPortUsed.AddTail(*Port);
  
  tpComSystem[IntPort(Port->sNumber)].idComDev=idComDev;
      /*
   // Create a secondary thread
      // to watch for an event.

      if (NULL == (hCommWatchThread =
                      CreateThread( (LPSECURITY_ATTRIBUTES) NULL,
                                    0,
                                    (LPTHREAD_START_ROUTINE) CommWatchProc,
                                    (LPVOID) npTTYInfo,
                                    0, &dwThreadID )))
      {
         CONNECTED( npTTYInfo ) = FALSE ;
         CloseHandle( COMDEV( npTTYInfo ) ) ;
         fRetVal = FALSE ;
      }
      else
      {
         THREADID( npTTYInfo ) = dwThreadID ;
         HTHREAD( npTTYInfo ) = hCommWatchThread ;

         // assert DTR

         EscapeCommFunction( COMDEV( npTTYInfo ), SETDTR ) ;

         SetTTYFocus( hWnd ) ;

         hMenu = GetMenu( hWnd ) ;
         EnableMenuItem( hMenu, IDM_DISCONNECT,
                        MF_ENABLED | MF_BYCOMMAND ) ;
         EnableMenuItem( hMenu, IDM_CONNECT,
                        MF_GRAYED | MF_DISABLED | MF_BYCOMMAND ) ;

      }
   */
   }
   else
   {
      fInUsed = FALSE ;
      CloseHandle( idComDev ) ;
   }

   // restore cursor

   SetCursor( hOldCursor ) ;

   return ( fRetVal ) ;


} // Fin Open 2



Cette discussion est classée dans : port


Répondre à ce message

Sujets en rapport avec ce message

PILOTAGE DU PORT IMPRIMANTE [ par bolix ] SALUT EST CE QUE L'ON PEUT ME DIRE SI ET COMMENT JE PEUT FAIRE POUR PILOTER UN PORT IMPRIMANTE NON PAS pour imprimer quelque chose mais pour envoyer controler les port d'un PC [ par naney ] Comment je peu faire pour controler un port d'un pc (ex: le port de la sourir ou le prot de l'ilmprimente c'est pour montage electronique controler pa rogrammation du port serie avec visual C++ 5.0 [ par tom ] J'essaye de creer un programme pour lire le port serie: Comment acceder aux ports serie a l'aide de visual C++? Quelles sont les classes et methodes Access en lecture et en écriture d'un port. [ par Philipin_Alain ] Est il encore possible avec C++ sous wintNT d'accéder à un registre quelconque. Je pense que les instructions "inport" et "outport" ne fonctionne pas port usb [ par agouti ] Comment peut on faire pour lire avec un lecteur de carte sur port usb merci d'avance port série C++ [ par kinder ] J'arrive à relier des appareils "compliqués" (avec parité, bauds, bits stop, ascii, ...), mais je merde sur une espèce de grosse souris : un bouton un Port série avec VISUAL C++ [ par Foof ] On a du mal a réceptionner les octets sur le port sérieOn a le programme mais il nous manque les définitions deUnion REGSSi qq a un exemple de prog qu detection automatique de peripherique [ par bidule ] J'ai un lecteur de carte puce connecté au port COM de mon pc.Comment faire pour que mon programme C (ou C++) detecte automatiquement l'insertion de l detection automatique de peripherique [ par bidule ] J'ai un lecteur de carte puce connecté au port COM de mon pc.Comment faire pour que mon programme C (ou C++) detecte automatiquement l'insertion de l communiquer avec le port serie en C [ par bidule ] salut je voudrais savoir comment detecter si un periphérique est connecté a mon pc en langage C.Quelqu'un a une idée?


Nos sponsors


Sondage...

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,328 sec (4)

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