Je travaille sur un projet qui utilise les capacités de l'hôte USB dans Android 3.2. Je souffre d'un manque déplorable de connaissance et de talent concernant la communication USB/série en général. Je suis également incapable de trouver un bon exemple de code pour ce que je dois faire.Communication USB hôte USB
Je dois lire à partir d'un périphérique de communication USB.
Ex: Lorsque je me connecte via Putty (sur mon PC) J'entrez:
>GO
Et l'appareil commence crachant des données pour moi. Pitch/Roll/Temp/Checksum.
Ex:
$R1.217P-0.986T26.3*60
$R1.217P-0.986T26.3*60
$R1.217P-0.987T26.3*61
$R1.217P-0.986T26.3*60
$R1.217P-0.985T26.3*63
je peux envoyer la première « GO » commande de l'appareil Android à laquelle je reçois un écho de « GO ».
Puis rien d'autre sur les lectures ultérieures.
Comment puis-je: 1) Envoyer la commande 'go'. 2) Lire dans le flux de données qui en résulte.
Le périphérique USB sur lequel je travaille comporte les interfaces suivantes (points de terminaison).
classe périphérique: Dispositif de communication (0x2)
Interfaces:
Interface # 0 Classe: dispositif de communication (0x2) Endpoint # 0 Direction: entrante (0x80) Type: Intrrupt (0x3) Intervalle d'interrogation: 255 Max Packet Taille: 32 Attributs: 000000011
Interface # 1 classe: Communication De vice-classe (CDC) (0xa) Endpoint # 0 Adresse: 129 Numéro: 1 Direction: trafic entrant (0x80) Type: En vrac (0x2) Intervalle d'interrogation (0) Taille maximale paquet: 32 Attributs: 000000010
Endpoint # 1 Adresse: 2 : 2 Direction: sortante (0x0) type: en vrac (0x2) Intervalle d'interrogation (0) Max Taille paquet: 32 Attributs: 000000010
Je suis capable de traiter les autorisations, de me connecter à l'appareil, de trouver la bonne interface et d'attribuer les points de terminaison. J'ai juste du mal à trouver la technique à utiliser pour envoyer la commande initiale lire les données qui suivent. J'ai essayé différentes combinaisons de bulkTransfer et controlTransfer sans chance.
Merci.
J'utilise l'interface # 1 comme on le voit ci-dessous:
public AcmDevice(UsbDeviceConnection usbDeviceConnection, UsbInterface usbInterface) {
Preconditions.checkState(usbDeviceConnection.claimInterface(usbInterface, true));
this.usbDeviceConnection = usbDeviceConnection;
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
UsbEndpoint ep = usbInterface.getEndpoint(i);
Log.d(TAG, "EP " + i + ": " + ep.getType());
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
} else if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
epIn = ep;
}
}
}
if (epOut == null || epIn == null) {
throw new IllegalArgumentException("Not all endpoints found.");
}
AcmReader acmReader = new AcmReader(usbDeviceConnection, epIn);
AcmWriter acmWriter = new AcmWriter(usbDeviceConnection, epOut);
reader = new BufferedReader(acmReader);
writer = new BufferedWriter(acmWriter);
}
pour ceux d'entre nous qui luttent là-bas, comment avez-vous choisi Interface 1, et dans quel but serait Interface 0, l'interface d'interruption, être utilisé? Merci! – Rachael