Port Com >10 [Résolu]

keerigan 54 Messages postés jeudi 6 mars 2003Date d'inscription 31 mai 2012 Dernière intervention - 2 avril 2005 à 11:30 - Dernière réponse : keerigan 54 Messages postés jeudi 6 mars 2003Date d'inscription 31 mai 2012 Dernière intervention
- 4 avril 2005 à 14:10
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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 4 avril 2005 à 09:42
1
Merci
pour ouvrir le port essaye avec
CreateFile("\\\\.\\COM10", ...)
au lieu de
CreateFile("COM10", ...)

Merci ymca2003 1

codes-sources a aidé 87955 internautes ce mois-ci

Commenter la réponse de ymca2003
cs_Ayato 14 Messages postés mercredi 22 janvier 2003Date d'inscription 13 novembre 2006 Dernière intervention - 2 avril 2005 à 12:08
0
Merci
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
Commenter la réponse de cs_Ayato
cs_Ayato 14 Messages postés mercredi 22 janvier 2003Date d'inscription 13 novembre 2006 Dernière intervention - 2 avril 2005 à 12:08
Commenter la réponse de cs_Ayato
keerigan 54 Messages postés jeudi 6 mars 2003Date d'inscription 31 mai 2012 Dernière intervention - 2 avril 2005 à 15:36
0
Merci
j'ai essaye avec vcterm et ca ne fonctionne toujours pas

je ne sais vraiment plus quoi faire

merci

Stéphane
Commenter la réponse de keerigan
keerigan 54 Messages postés jeudi 6 mars 2003Date d'inscription 31 mai 2012 Dernière intervention - 2 avril 2005 à 17:22
0
Merci
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
Commenter la réponse de keerigan
angsthase 72 Messages postés mardi 20 juillet 2004Date d'inscription 11 avril 2005 Dernière intervention - 4 avril 2005 à 09:17
0
Merci
Pöurrais tu envoyer ta source ( Keerigan ) pour commu,iquer avec tes ports com ( jusqu'a 9) ??? stp ?


AngstHase
Commenter la réponse de angsthase
angsthase 72 Messages postés mardi 20 juillet 2004Date d'inscription 11 avril 2005 Dernière intervention - 4 avril 2005 à 10:21
0
Merci
ymca2003, peut tu mettre tout le code pour ouvrir un port com ?????



( compatible linux) stp


AngstHase
Commenter la réponse de angsthase
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 4 avril 2005 à 12:15
0
Merci
Ce que je t'ai mis c'est pour Windows (cf mes sources pour l'exemple base).
Pour linux, aucune idée...
Commenter la réponse de ymca2003
keerigan 54 Messages postés jeudi 6 mars 2003Date d'inscription 31 mai 2012 Dernière intervention - 4 avril 2005 à 14:10
0
Merci
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
Commenter la réponse de keerigan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.