IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Bus USB : Communication


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Par défaut Bus USB : Communication
    Bonjour,

    Je travaille avec VB6 (débutant) et j'ai windows XP comme OS.

    Je dois réaliser une petite application qui récupère des données depuis un microcontrolleur C8051F326/7 (voir doc ici : https://www.silabs.com/Support%20Doc.../C8051F326.pdf et programmer guide ici : https://www.silabs.com/Support%20Doc...Docs/an169.pdf) qui est branché au pc par USB.

    Le microcontrolleur ne fait pas apparaitre de lecteur dans le poste de travail donc je ne peux pas me référencer à une lettre ... comme pour une clé USB ...

    J'ai récupérer la DLL "SiUSBXp.dll" qui contient les fonctions énoncées dans le programmer guide.

    Le but de mon programme c'est de récupérer les informations suivantes :
    - Peripheral,
    - Salesman ID,
    - Product ID,
    -Serial number.
    et de les stocker dans des champs texte d'un formulaire.

    (j'ai trouvé un petit programme : https://www.silabs.com/Support%20Doc...re/an144sw.zip qui permet de faire cela mais avec une autre DLL que je ne parviens pas à utiliser. En plus, je ne peux pas spécialement m'aider du code source mis à disposition car, je n'ai jamais fait de C++ et disons que je suis vraiment perdu en voyant le code)

    Voici ce que j'ai déjà fait :

    1) Création du formulaire avec les champs
    2) Récupération de tous les périphériques USB connecté sur la machine dans une zone de liste déroulante.
    3) Ouverture de la communication avec le périphérique qui me concerne.

    Voici où je bloque :

    Je ne comprend pas comment récupérer les informations dont j'ai besoin ...

    Ma (mes) question (s) :
    Est-ce que vous auriez déjà effectuer des transferts de données avec des périphériques USB en VB6 ? ... si oui, est-ce que vous pourriez me guider un peu ? ...

    Merci d'avance pour votre aide.

    Salutations à vous tous.

    S'Noop'y ...

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonsoir,
    Si tu as installé correctement VB6 et ses outils tu dois disposer de Dependency Walker.
    Sert-en pour explorer la librairie afin de connaitre les fonctions qui t'interessent et pouvoir ensuite les utiliser avec un declare function ...
    le code fourni dans le fichier .h devrait te permettre de retrouver sans trop de difficultés les paramètres à utiliser avec chacune d'elles.
    Bon courage.

  3. #3
    Membre éclairé Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Par défaut
    Bonjour,

    Merci pour la réponse ... je ne connaissais pas "Dependency Walker" et c'est un super outil ...

    J'ai réussi à récupérer toutes les fonctions qui étaient dans ma DLL et je les ai déclaré dans un module VB. C'est extra ... à l'aide du fichier ".h" j'ai également pu voir comment les déclarer ... ...

    Maintenant je suis un peu embêté car je n'arrive malheureusement pas à utiliser une fonction qui est présente dans ma DLL.

    La fonction en question est la suivante : CP210x_GetDevicePid

    Voici le code :

    Déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function CP210x_GetDevicePid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, lpwPid As Long) As Integer
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CP210x_STATUS = CP210x_GetDevicePid(hUSBDevice, lpwPid)
    Résultat : CP210x_STATUS = 1 ce qui signifie que j'ai une erreur "Invalid Handle"

    Pour que STATUS soit à succès il faudrait qu'il soit à la valeur "0".

    J'ai fait quelques autres tests avec des autres fonctions que la DLL me propose et j'arrive à des choses positives comme par exemple :

    Déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function CP210x_GetProductString Lib "CP210xManufacturing.dll" (ByVal dwDeviceNum As Long, ByRef lpvDeviceString As Byte, ByVal dwFlags As Long) As Integer
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Function GetDeviceList() As Boolean
     
        'device number, device string, and temp var newdevstring
        Dim DevNum As Long
        Dim DevStr(CP210x_MAX_DEVICE_STRLEN) As Byte
        Dim NewDevStr As String
        Dim i As Integer
        Dim P0
     
        'Effacement de la zone de liste déroulante contenant les noms des périphériques connectés
        zdld_peripheriqueUsb.Clear
     
        'Détermine le nombre de périphériques connectés
       CP210x_STATUS = CP210x_GetNumDevices(DevNum)
        'CP210x_STATUS = CP210x_GetNumDevices(DevNum)
     
        'Si on trouve un périphérique on recherche son nom pour l'afficher dans la zone de liste déroulante
        If CP210x_STATUS = CP210x_SUCCESS Then
            For i = 0 To (DevNum - 1)
                CP210x_STATUS = CP210x_GetProductString(i, DevStr(0), CP210x_RETURN_SERIAL_NUMBER)
                NewDevStr = ConvertToVBString(DevStr)
                zdld_peripheriqueUsb.AddItem NewDevStr, i
     
            Next
     
            zdld_peripheriqueUsb.ListIndex = 0 'then set combo list to first item
            GetDeviceList = True    'return true since we found hardware
        Else
            zdld_peripheriqueUsb.ListIndex = -1 'otherwise set list to -1
            GetDeviceList = False    'return false and close since we didnt
        End If                       'find hardware
     
    End Function
    Résultat : NewDevStr = 0001 --> Qui est bien le nom du produit que j'utilise

    ... Est-ce que vous auriez des idées concernant mon problème qui est "Comment puis-je utiliser : "CP210x_GetDevicePid"" ?

    Merci beaucoup pour votre aide ... ... comme je vous l'ai dit dans mon premier poste, je débute et j'ai un peu de mal ...

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    tu passes 2 paramètres (hUSBDevice et lpwPid) dont nous ignorons tout de la manière dont tu les as extraits/définis ! ===>> aide alors impossible !

  5. #5
    Membre éclairé Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Par défaut
    Bonjour,

    Merci pour ta réponse ... Excusez moi pour l'oublie de code :

    Voici ce qu'il vous faut :

    1) Déclaration de la fonction présente dans la DLL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function CP210x_GetDevicePid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, lpwPid As Long) As Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global CP210x_PRODUCT_STRING

    2) Appel lorsque l'on cliquer sur un bouton présent dans un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub btn_verifier_connexion_Click()
     
        hUSBDevice = INVALID_HANDLE_VALUE
        GetDevicePID
     
    End Sub
    3) Fonction : "GetDevicePID"":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Function GetDevicePID() As Boolean
        hUSBDevice = INVALID_HANDLE_VALUE
        'Détermine le nombre de périphériques connectés
     
        CP210x_STATUS = CP210x_GetNumDevices(DevNum)
        'Si il y a des périphériques connecté
        If (CP210x_STATUS = CP210x_SUCCESS) Then
     
            CP210x_STATUS = CP210x_Open(zdld_peripheriqueUsb.ListIndex, hUSBDevice)
            'Si le périphérique est ouvert
            If (CP210x_STATUS = CP210x_SUCCESS) Then
                CP210x_STATUS = CP210x_GetDevicePid(hUSBDevice, CP210x_PRODUCT_STRING)
     
                'CP210x_SUCCESS = 0
                If (CP210x_STATUS = CP210x_SUCCESS) Then
                    GetDevicePID = True
     
                'CP210x_DEVICE_NOT_FOUND = 255
                ElseIf (CP210x_STATUS = CP210x_DEVICE_NOT_FOUND) Then
                    MsgBox "CP210x_DEVICE_NOT_FOUND = 255"
                    GetDevicePID = False
     
                'CP210x_INVALID_HANDLE = 1
                ElseIf (CP210x_STATUS = CP210x_INVALID_HANDLE) Then
                    MsgBox "CP210x_INVALID_HANDLE = 1"
                    GetDevicePID = False
     
                'CP210x_INVALID_PARAMETER = 2
                ElseIf (CP210x_STATUS = CP210x_INVALID_PARAMETER) Then
                    MsgBox "CP210x_INVALID_PARAMETER = 2"
                    GetDevicePID = False
     
                End If 'If (CP210x_STATUS = CP210x_SUCCESS) Then
            End If 'If (CP210x_STATUS = CP210x_SUCCESS) Then
        End If 'If (CP210x_STATUS = CP210x_SUCCESS) Then
    End Function
    4) Définition de la fonction "CP210x_GetDevicePid" trouvé dans le PDF du programmer guide :

    CP210x_GetDevicePid
    Description:
    Returns the 2-byte Product ID field of the Device Descriptor contained in EEPROM of a CP210x device.

    Supported Devices: CP2101, CP2102, CP2103

    Location: CP210x Manufacturing DLL

    Prototype: CP210x_STATUS CP210x_GetDevicePid( HANDLE Handle, LPWORD Pid )

    Parameters: 1. Handle—Handle to the device to close as returned by CP210x_Open().

    Parameters: 2.PID—Pointer to a 2-byte value that returns the Product ID of the CP210x device.

    Return Value:CP210x_STATUS=CP210x_SUCCESS,
    CP210x_INVALID_PARAMETER,
    CP210x_INVALID_HANDLE,
    CP210x_DEVICE_IO_FAILED
    5) Question :
    Je ne comprend pas pourquoi ma fonction "CP210x_GetDevicePid" me retourne "INVALID HANDEL" donc 1 dans la variable "CP210x_STATUS".

    Une fois sur 2 lorsque je clic sur mon bouton qui appelle ma fonction, je ne parviens pas à accéder au test "CP210x_STATUS = CP210x_GetDevicePid(hUSBDevice, CP210x_PRODUCT_STRING)" car la fonction "CP210x_Open" me retourne "255" donc périphérique introuvable ... Je ne comprend vraiment pas pourquoi cela fait ça ... surtout si la fonction "CP210x_GetNumDevices(DevNum)" retourne bien des périphériques connectés.

    Merci beaucoup pour votre aide ...

    PS : J'espère que mon post est complet maintenant ... si ce n'est pas le cas, dites moi et je complèterai ...

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Nous ne voyons toujours pas l'extraction de hUSBDevice.
    Qu'est donc INVALID_HANDLE_VALUE (qui semble être une constante) ?
    en lisant mla citation de ton manuel, je devine que la valeur de hUSBDevice est obtenue par utilisation de :
    Parameters: 1. Handle—Handle to the device to close as returned by CP210x_Open() .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer/recevoir avec les bus USB, PCI, etc en Assembleur
    Par Lucas Panny dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 05/01/2008, 15h38
  2. [debutant]/proc/bus/usb/
    Par blaise_laporte dans le forum SUSE
    Réponses: 0
    Dernier message: 22/08/2007, 16h50
  3. Controleur bus usb drivers
    Par krachik dans le forum Composants
    Réponses: 5
    Dernier message: 14/05/2007, 09h41
  4. Proc à 100% à cause du controleur de bus USB.
    Par byloute dans le forum Windows XP
    Réponses: 9
    Dernier message: 02/04/2007, 10h41
  5. probleme controleur de bus usb..
    Par wareq dans le forum Composants
    Réponses: 7
    Dernier message: 23/02/2006, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo