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

Android Discussion :

petit soucis de performance pour lire les datas via le protocole Bulk (USB)


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut petit soucis de performance pour lire les datas via le protocole Bulk (USB)
    Bonjour à tous,

    Voila j'ai relié mon smartphone à un microcontrôleur (µC) via un port USB. Pour la communication j'utilise le protocole bulk pour récupérer les data de mon µC et ca marche, mais je trouve la vitesse de transfere trop lente, mon smartphone récupère 8000 octets par seconde alors que mon µC émet 800 000 octets par seconde. Je précise que je n'ai pas paramétré la vitesse de réception de mon smartphone, mais il le fait tres bien tout seul car les paquets que je recois sont les bons.
    Avec la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0)//baudrate 57600
    je tente de modifier la vitesse de lecture de mon smartphone (dans le but de recevoir plus d'octet) mais ca ne marche pas du tout, je ne recois meme plus rien, peut etre car le protocole bulk impose une vitesse?
    Je trouve que la doc d'android studio est peu exhaustive sur la méthode controlTransfer : https://developer.android.com/refere...onnection.html mais j'ai peu d'experience sur android donc je me renseigne peut etre mal. Vous avez peut etre une méthode pour accéléré la lecture car j'imagine que la vitesse de lecture peut aller plus vite.


    Voila merci d'avance de votre aide

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2018
    Messages : 63
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Citation Envoyé par cosmoff Voir le message
    Bonjour à tous,
    je trouve la vitesse de transfere trop lente, mon smartphone récupère 8000 octets par seconde alors que mon µC émet 800 000 octets par seconde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0)//baudrate 57600
    Un lien qui peut t'éclairer sur controlTransfer et le transfer de donnée USB :
    http://nilhcem.com/android-things/usb-communications

    Vous avez peut etre une méthode pour accéléré la lecture car j'imagine que la vitesse de lecture peut aller plus vite.
    J'imagine que c'est borné, mais c'est surement pas à 8 ko/s, regarde les doc techniques sur le port USB de ton smartphone,
    ça peut t'aider

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    Merci de ta réponse, mais malheureusement il n'y a rien concernant la vitesse de réception des data. Je te montre mon code (en Kotlin) pour gérer la vitesse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                var  connection = mUsbManager!!.openDevice(device)
                var data = ByteArray(4000)
                if (connection != null) {
                    if (connection.claimInterface(device!!.getInterface(0), true)) {
                        connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0)//baudrate 57600
                        val result = connection.bulkTransfer(endpoint, data, data.size, timeout)//mettre ca dans un thread
                        connection.close()
                    }
    quand la ligne connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0)//baudrate 57600 n'est pas mise, je receptionne correctement les trames, mais à la vitesse de 8ko/s, et le fait de mettre cette ligne de code m'enpeche de recevoir les data.
    As tu une idée du probleme ?

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2018
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2018
    Messages : 63
    Points : 96
    Points
    96
    Par défaut
    Pour ce qui est des docs technique de l'USB :
    http://www.usb.org/developers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connection.controlTransfer(0x40, 0x03, 0x0034, 0, null, 0, 0)//baudrate 57600
    Ici ton premier élément 0x40 correspond au "bmRequestType" qui est composé de trois champs :
    - La direction de transmission de donnée (1 bit)
    - Le type (2 bits)
    - Le destinataire (5 bits)

    Donc si tu décomposes en binaire : 0x40 = 0b0100 0000

    Dans ton cas ça veux dire : Transmission des données du uProcesseur vers ton Smartphone défini avec un type "Vendor" (vérifier sa signification, car c'est peut être réservé pour un vendeur spécial) et un destinataire de type "Device".
    Je suis pas sûr que ça soit ce que tu cherches à faire, mais du coup essaye de remplacer par 0b10000000 (=0x80) qui correspond à une transmission du Smartphone vers le uProcesseur avec un type standard !

    Source : http://www.beyondlogic.org/usbnutshe...ml#SetupPacket

    C'est un peu compliquer à comprendre, mais ce sont des communications spécifiés et il faut bien lire toutes les docs (ça n'a rien à voir avec l'Android en soit)

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    Merci beaucoup pour ton aide, le connection.controlTransfer(0x80, 0x03, 0x0034, 0, null, 0, 0) n'a rien changé hélas
    Ca a l'air assez compliqué, je veux juste gérer la vitesse de lecture de mon smartphone, car mon µController envoie des data a grande vitesse donc je pense que c'est 0x40 qu'il faut bien mettre. Je pensais que la méthode controlTransfer permettait de changer la vitesse mais j'ai l'impression que non. J'ai essayé de mettre connection.controlTransfer(0x00, 0x03, 0x0034, 0, null, 0, 0) mais ca ne marche pas non plus

Discussions similaires

  1. [JDOM] Problème pour lire les noeuds avec JDOM
    Par Eclix dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/05/2014, 18h11
  2. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  3. logiciel pour lire les fichiers dtp
    Par compton dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 24/04/2006, 12h21
  4. fonction pour lire les fichier audio
    Par tarek007 dans le forum Multimédia
    Réponses: 1
    Dernier message: 11/05/2005, 16h28

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