Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : port Com >10 [ Archives / Au secours ] (keerigan)

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é 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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.