Domanda

Sto lavorando a un progetto che utilizza le funzionalità host USB in Android 3.2. Soffro di una deplorevole mancanza di conoscenza e talento per quanto riguarda la comunicazione USB/seriale in generale. Non riesco anche a trovare un buon codice di esempio per quello che devo fare.

Devo leggere da un dispositivo di comunicazione USB.
Es: quando mi connetto tramite PUTTY (sul mio PC) INTRO:

>GO

E il dispositivo inizia a espellere i dati per me. 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

Posso inviare il comando iniziale 'go' dal dispositivo Android in quel momento ricevo un'eco di 'go'.

Quindi nient'altro su nessuna lettura successiva.

Come posso: 1) Inviare il comando 'go'. 2) Leggi nel flusso di dati che risultano.

Il dispositivo USB con cui sto lavorando ha le seguenti interfacce (endpoint).

Classe di dispositivo: dispositivo di comunicazione (0x2)

Interfacce:

Interfaccia #0 Classe: dispositivo di comunicazione (0x2) Endpoint #0 Direzione: inbound (0x80) Tipo: interrupt (0x3) Intervallo del sondaggio: 255 Dimensione del pacchetto massimo: 32 Attributi: 000000011

Interfaccia n. 1 Classe: dispositivo di comunicazione Classe (CDC) (0xa) Endpoint #0 Indirizzo: 129 Numero: 1 Direzione: Inbound (0x80) Tipo: Bulk (0x2) Intervallo del sondaggio (0) Max Pacchetto Dimensione: 32 Attributi: 00000001010

Endpoint #1 Indirizzo: 2 Numero: 2 Direzione: Outbound (0x0) Tipo: Bulk (0x2) Intervallo del sondaggio (0) MASSA Dimensione del pacchetto: 32 Attributi: 000000010

Sono in grado di gestire l'autorizzazione, connettermi al dispositivo, trovare l'interfaccia corretta e assegnare gli endpoint. Ho solo problemi a capire quale tecnica utilizzare per inviare il comando iniziale leggi i dati che ne derivano. Ho provato diverse combinazioni di bulktransfer e controllo di controllo senza fortuna.

Grazie.

Sto usando l'interfaccia n. 1 come visto di seguito:

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top