begin process at 2012 02 10 06:56:21
  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

[BAR]pilote usb [ par dido1987 ] salut, j'ai ecrit un simple code en C sur le pic 18f4550 pour afficher une information sur lcd,maintenant je veut envoyer cette information à travers interface homme machine sous labwindows via USB [ par Julie84 ] Bonjour, Je me présente je m'appelle Julie, à ce jour j'ai un projet à réaliser afin d'exploiter les data d'une carte élec, et de créer un interface h ouvrir une communication série (usb) [ par lolitatou ] salut :) je ne sais pas si je poste au bon thème mais j'essaye quand même. Comment je peux ouvrir une communication série (usb)en C ? je vais utilise dialogue USB [ par marcus112 ] Bonjour à tous, comment est-ce que je peux à partir d'une commande (un appuie bouton ou une variable qui passe à 1), faire transférer un fichier (don comment "redémarrer un device usb sous fedora" [ par kraimamo ] Bonsoir, y a qlqun qui peut m'aider svp. Je développe un simulateur pour un dongle USB . A chaque appui sur un bouton pour lancer une fonction, je do suppression clé registre XP des entrées USB (clés) [ par lionel62620 ] Bonjour a tous, Je cherche un programme qui supprime toutes entrées dans la base de registre XP des clé USB insérées. Ne trouvant pas de logiciels de Gerer une liaison serie avec un cable de conversion USB/Serie [ par locotracteur ] Bonjour, je souhaite dialoguer avec une carte Arduino a base de PIC . Jai réalisé un programme d'echo dans le pic de la carte Arduino( retourne le ca Détection et affichage des ports USB et devices USB en C [ par stiki ] Bonjour à tous, Je suis novice en C et je me retrouve bloqué sur la fonction d'affichage et détection des USB sur le PC. Le but de ma fonction est d 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

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,416 sec (3)

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