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

API standards et tierces Android Discussion :

Programation d'une connexion USB


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut Programation d'une connexion USB
    Bonjour les gens,

    Je cherche à réaliser une connexion USB entre un androphone et un microcontrôleur Microchip. Le microcontrôleur est l'host de la connexion.

    J'ai cherché sur le site developer.android.com où j'ai trouvé les fonctions Usb Accessory (http://developer.android.com/guide/t...accessory.html) mais certaines parties ne sont pas acceptées par éclipse (ou mal comprise par moi) et avec les modifications que j'ai effectuées pour enlever les erreurs le programme plante à l'initialisation de la connexion.

    Voici mon code :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    package com.test.projet;
     
    import java.io.FileDescriptor;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import android.hardware.usb.UsbAccessory;
    import android.hardware.usb.UsbManager;
    import android.os.Bundle;
    import android.os.ParcelFileDescriptor;
    import android.app.Activity;
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.TextView;
     
    public class MainActivity extends Activity {
     
    	private TextView coucou = null;
    	private ParcelFileDescriptor mFileDescriptor;
    	private FileInputStream mInputStream;
    	private FileOutputStream mOutputStream;
    	private static final String ACTION_USB_PERMISSION =
    		    "com.android.example.USB_PERMISSION";
    	protected static final String TAG = null;
    	private UsbManager mUsbManager = null;
    	private PendingIntent mPermissionIntent = null;
    	private UsbAccessory accessory = null;
     
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
     
    	    coucou = (TextView) findViewById(R.id.coucou);		//L'objet coucou servira ensuite à afficher la progression du programme
    	    mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
     
    	    mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
    	    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    	    registerReceiver(mUsbReceiver, filter);
    	}
     
    	@Override
    	public boolean onCreateOptionsMenu(Menu menu) {
    		// Inflate the menu; this adds items to the action bar if it is present.
    		getMenuInflater().inflate(R.menu.activity_main, menu);
    		return true;
    	}
    //Fonction récupérée sur le site developer android
    	private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
     
    	    public void onReceive(Context context, Intent intent) {
    	        String action = intent.getAction();
    	        if (ACTION_USB_PERMISSION.equals(action)) {
    	            synchronized (this) {
    	                accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
     
    	                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
    	                    if(accessory != null){
    	                        //call method to set up accessory communication
    	                    }
    	                }
    	                else {
    	                    Log.d(TAG, "permission denied for accessory " + accessory);
    	                }
    	            }
    	        }
    	    }
    	};
    //Fonction qui se lance lors de l'appui sur le bouton
    	public void envoiCommande(View view) {
    	    coucou.setText("Début connexion");
    		byte[] data = new byte[2];
    		data[0] = 1;
    		data[1] = 1;
    		UsbAccessory[] accessories = null;
     
    		if(mUsbManager != null){
    			accessories = mUsbManager.getAccessoryList();
    			coucou.setText("accessories rempli !");
    			}
    		if(accessories != null){
    			accessory = accessories[0];
    			coucou.setText("accessory rempli !");
    			}
    		if(accessory != null){
    			mUsbManager.requestPermission(accessory, mPermissionIntent);
     
    			mFileDescriptor = mUsbManager.openAccessory(accessory);		//Le programme plante vers ici
    			if (mFileDescriptor != null) {
    				FileDescriptor fd = mFileDescriptor.getFileDescriptor();
    				mInputStream = new FileInputStream(fd);
    				mOutputStream = new FileOutputStream(fd);
    				Thread thread = new Thread(ecriture(), "AccessoryThread");	//Aucune idée de la validité de cette ligne
    				thread.start();
    			}
    	    }
    	}
     
    	public Runnable ecriture() {
     
    		return null;
    	}
     
    	public static String getActionUsbPermission() {
    		return ACTION_USB_PERMISSION;
    	}
     
    }

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 2
    Par défaut
    J'ai trouvé la solution, il faut rajouter un test pour la permission "mUsbManager.hasPermission(accessory)" là où il me semblait que le programme plantait.
    J'ai maintenant un autre problème pour cette connexion. Elle fonctionne correctement sur un smartphone mais pas sur une tablette (c'est aussi le cas pour le programme de microchip). J'ai pour les tests deux tablettes récentes dont je ne connais pas les références : une 10 pouces d'asus et une 7 pouces de samsung. Si quelqu'un à une idée de pourquoi la connexion ne fonctionne pas sur ces tablettes, merci d'avance.

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

Discussions similaires

  1. lancement d'une application lors d'une connexion usb
    Par Ced_92 dans le forum Windows
    Réponses: 1
    Dernier message: 07/05/2009, 17h23
  2. Comment détecter une connexion USB
    Par TekP@f dans le forum Windows
    Réponses: 3
    Dernier message: 23/01/2009, 14h54
  3. Problème avec une connexion USB
    Par beldabreakdown dans le forum Windows
    Réponses: 2
    Dernier message: 19/01/2009, 15h47
  4. Réponses: 1
    Dernier message: 09/09/2008, 00h58
  5. Comment detecter la connexion d'une clé USB
    Par uvealoop dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 16h57

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