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;
	}
 
}