begin process at 2010 03 22 15:25:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Driver

 > 

USB


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

USB

mardi 20 février 2007 à 09:12:30 | USB

seignseifer

Bonjour,
je pense que cette question a du etre posee plusieurs fois, mais je n'ai trop trouve de reponse claire. Je suis debutant et j'aurai aime savoir comment recevoir des information d'un appareil branche en USB. Je developpe sous Borland C++Builder 6, et je souhaite recevoir les information que transmet un analyseur de spectre a l'ordinateur , via USB.
Je vous remercie
mardi 20 février 2007 à 09:15:52 | Re : USB

Andejen

attention tu dois t'etre endormi sur la touche entrée de ton clavier, c'est le troisième exemplaire de ton message sur le forum...
mercredi 27 février 2008 à 13:14:21 | Re : USB

BeTranx

Tu peux utiliser les mêmes API Win32 qu'avec les ports COM i.e. CreateFile, WriteFile, ReadFile et CloseHandle.
La difficulté consiste à trouver le nom du port USB à utiliser lorsque tu fais le CreateFile. Il te faut récupérer le SymbolicName dans la registry sous la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB.
Chacune des subkeys de la clé ci-dessus correspond à une entrée USB (devices, hubs...) et il te faut rechercher celle que tu veux. Une fois que tu l'as trouvé, tu peux ouvrir le port avec CreateFile.

Tu peux également utiliser la SetupApi.dll pour rendre ce processus automatique une fois que tu sais quelles informations tu cherches mais ce n'est pas nécessaire dans un premier temps et tout n'est pas accessible (du moins je n'ai pas pu accéder à toutes les infos que je cherchais...)
J'ai dû modifié le source code donc ça risque de ne pas compiler dès le premier coup... Je te conseille de lire l'article sur les Communications avec un port série (lien au début du post).

class CComm
{
protected:
   // Handle du port
    HANDLE        m_hPort;

    // Structure pour les IO
    OVERLAPPED    m_olWrite, m_olRead;

public:
BOOL ConnectComm (CString strPortName)
{
    // Return value
    BOOL hResult = FALSE;

    // Initialize the structures for asynchronous Read/Write operations
    ::ZeroMemory(&m_olWrite, sizeof(OVERLAPPED));
    ::ZeroMemory(&m_olRead, sizeof(OVERLAPPED));

    // Initializes asynchronous events
    m_olWrite.hEvent= CreateEvent(0, TRUE, FALSE, 0);
    m_olRead.hEvent = CreateEvent(0, TRUE, FALSE, 0);

    // Flags
    DWORD dwAttrib = FILE_ATTRIBUTE_NORMAL |                                                                                 FILE_FLAG_OVERLAPPED;

    m_hPort = ::CreateFile(strPortName,
                                            GENERIC_READ|GENERIC_WRITE,
                                            FILE_SHARE_READ|FILE_SHARE_WRITE,
                                            NULL,
                                            OPEN_EXISTING,
                                            dwAttrib,
                                            NULL);
   
    if ( m_hPort != INVALID_HANDLE_VALUE )
    {
        hResult = TRUE;
    }
    else
    {
        _ASSERT(FALSE);      
        m_hPort                = NULL;
    }

    return hResult;
};

void DisconnectComm()
{
     if (m_hPort)
    { 
        ::CloseHandle(m_hPort);
        m_hPort= NULL;
    }

    if (m_olWrite.hEvent)
    { 
        ::CloseHandle(m_olWrite.hEvent);
        m_olWrite.hEvent= NULL;
    }

    if (m_olRead.hEvent)
    { 
        ::CloseHandle(m_olRead.hEvent);
        m_olRead.hEvent= NULL;
    }
};

BOOL Write (LPBYTE lpData, DWORD dwLength,DWORD& dwTotalWritten)
{
    DWORD     dwWritten = 0, dwResult = 0, dwError;
    BOOL hr = FALSE;
    BOOL    bTimeOut = TRUE;

    // Lors de la lecture ou l'écriture sur un device,
    // le seul élément utilisé est le hEvent
    ResetOVERLAPPEDStruct(&m_olWrite);
   
    while (dwLength)
    {
         if (!::WriteFile(m_hPort, pData, dwLength, &dwWritten, &m_olWrite))
        {
            dwError = ::GetLastError();
            if ( dwError == ERROR_IO_PENDING )
            {
                   dwResult = ::WaitForSingleObject(m_olWrite.hEvent,5000);
               
                    switch(dwResult)
                    {
                    case WAIT_OBJECT_0:
                        ::GetOverlappedResult(m_hPort, &m_olWrite, &dwWritten, FALSE);                      
                        if ( dwWritten )
                            hr = TRUE;                      
                        break;

                    case WAIT_TIMEOUT:
                    case WAIT_ABANDONED:
                    case WAIT_FAILED:
                    default:
                            _ASSERT(FALSE);
                            break;
                    }      
            }
            else
            {
                _ASSERT(FALSE);
             }
        }
        else
        {
            if (dwWritten == dwLength)
                 hr = TRUE;
        }
    }

    return hr;
};

BOOL Read(LPBYTE pData, DWORD nMax, DWORD& dwRead)
{
    BOOL hr = FALSE;
   
    DWORD    dwErr, dwLen = (DWORD)nMax, dwError, dwResult;
    COMSTAT    CS;   
    DWORD     oldtime;
    bool    bContinue = true;

    // Lors de la lecture ou l'écriture sur un device,
    // le seul élément utilisé est le hEvent
    ResetOVERLAPPEDStruct(&m_olRead);   

    if (dwLen)
    {
        // Lecture du port
             if (!::ReadFile(m_hPort, pData, dwLen, &dwRead, &m_olRead))
            {
                dwError = ::GetLastError();
                if ( dwError == ERROR_IO_PENDING )
                {
                    dwResult = ::WaitForSingleObject(m_olRead.hEvent, 5000);
                    switch(dwResult)
                    {
                    case WAIT_OBJECT_0:
                        ::GetOverlappedResult(m_hPort, &m_olRead, &dwRead, FALSE);
                         hr = TRUE;
                        break;

                    case WAIT_TIMEOUT:
                    case WAIT_ABANDONED:
                    case WAIT_FAILED:
                    default:
                         _ASSERT(FALSE);
                         break;
                    }
                }
                else
                {
                        _ASSERT(FALSE);
                }
            }
            else
            {
                dwError = ::GetLastError();
                hr = TRUE;
            }
        }
    }

    return hr;
};
};

void ResetOVERLAPPEDStruct(OVERLAPPED *pStruct)
{
    if ( pStruct == NULL )
        return;

    pStruct->Internal        = 0;
    pStruct->InternalHigh    = 0;
    pStruct->Offset            = 0;
    pStruct->OffsetHigh        = 0;
}





Cette discussion est classée dans : information, usb, recevoir


Répondre à ce message

Sujets en rapport avec ce message

port usb [ par agouti ] Comment peut on faire pour lire avec un lecteur de carte sur port usb merci d'avance Comment envoyer ou recevoir un fichier d'une adresse ftp ? [ par JMGR ] Tout est dit dans le titre :)ex : bouton "S'incrire" qui envoit le fichier res.txt vers ftp.truc.fr/jmgr/res.txt Information Serveur Smtp [ par Kotei ] Je cherche des info. pour creer un serveur STMP, quelqu'un a une idee pour en faire unMerci ca fais 1 semaine ke je sui dessus snif lecture sur le port usb [ par Draven ] je souhaite branche une webcam sur le port usb et faire la lecture de ce que transmet la webcam. mais je sais pas koment lire le port usb.alors si vou Debuggeur [ par lerilcy ] J'ai une erreur dans mon programme sur l'utilisation de fichiers et comme je debute je comprend pas grand chose au debuggeur! Voici l'erreur pendant l port usb [ par voodoudic ] salut a tous vous n'auriez pas des source pour lire les port usb?j'ai chercher sur tout le site j'ai pas trouvésource orienté plus sur l'empreinte dig generer un frequence et la recconnaitre [ par Cookys ] Bon jour je cherche a coder des information ascii sous forme de son afin de pouvoir les mettre sur un piste audio d'une video par exemple , puis dans Envoyer et recevoir un fichier par Socket en C [ par coolboy78 ] Bonjour,j'aimerai Envoyer et recevoir un fichier par Socket en C. Mais je n'ai pas trouvé de fonction ni d'exemple pour ceci.Si kelkun pouvez maider, c++ objet : information theorique [ par adidmamah ] bon voila g une class terrainje cré un objet :terrain t[2];ici j'imagine que le constructeur de la class est appeler 2 fois pour chaque case du tablea J'arrive pas à recevoir (C++) [ par lukilou ] Salut, j'ai un petit problème pour la réception d'info mais j'arrive bien à envoyer.Je passe la déclaration du socket etc car ca fonctionne.listen(soc


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

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 : 3,120 sec (4)

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