2017-04-11 4 views
1

Ich habe ein Arduino konfiguriert, um Dinge auf TX-Port zu schreiben, die mit meinem Raspberry Pi 3 mit Android Things Developer Vorschau 3 verbunden ist (Ich bin sicher, dass der RX/TX Kabel sind richtig konfiguriert und Spannungen sind OK).Android Things 3 kann nicht lesen von Rxtx auf Raspberry PI 3

Ich versuche eine lange Zeit, Daten zu lesen und Daten mit PeripheralManagerService von Android Things libs zu schreiben.

Es ist ein Fehler, wenn ich die app starten:

04-11 16: 26: 13,665 163-163 /? I/peripherie: type = 1400 audit (0.0: 44): avc: verweigert {read write} für name = "ttyAMA0" dev = "tmpfs" ino = 1203 skontext = u: r: peripherenman: s0 tcontext = u: object_r: Gerät: s0 tclass = chr_file permissiv = 1

04-11 16: 26: 13.665 163-163 /? Ich/peripherie: type = 1400 audit (0.0: 45): avc: verweigerte {open} für path = "/ dev/ttyAMA0" dev = "tmpfs" ino = 1203 skontext = u: r: peripherie: s0 tcontext = u: object_r: Gerät: s0 tclass = chr_file permissiv = 1

04-11 16: 26: 13.665 163-163 /? I/peripherie: type = 1400 audit (0.0: 46): avc: verweigert {ioctl} für path = "/ dev/ttyAMA0" dev = "tmpfs" ino = 1203 ioctlcmd = 5401 scontext = u: r: periphere: s0 tkontext = u: object_r: Gerät: s0 TClass = chr_file permissive = 1

Mein Code:

public class MainActivity extends Activity { 

private final int BUFFER_SIZE = 64; 
private UartDevice rxtx; 


public void configureUartFrame(UartDevice uart) throws IOException { 
    // Configure the UART port 
    uart.setBaudrate(9600); 
} 

public void writeUartData(UartDevice uart, String msg) throws IOException { 
    byte[] buffer = msg.getBytes(); 
    int count = uart.write(buffer, buffer.length); 
    Log.d(TAG, "Wrote " + count + " bytes to peripheral"); 
} 

public void readUartBuffer(UartDevice uart) throws IOException { 
    byte[] buffer = new byte[BUFFER_SIZE]; 
    int count; 
    while ((count = uart.read(buffer, buffer.length)) > 0) { 
     Log.d(TAG, "Read " + count + " bytes from peripheral"); 
     Log.d("Message", new String(buffer)); 
    } 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
     try { 
      writeUartData(rxtx, "teste"); 
      readUartBuffer(rxtx); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    PeripheralManagerService manager = new PeripheralManagerService(); 

    manager.getUartDeviceList(); 
    List<String> portList = manager.getUartDeviceList(); 

    if (portList.isEmpty()) { 
     Log.i(TAG, "No UART port available on this device:"); 
    } else { 
     Log.i(TAG, "List of RXTX available ports: - " + portList); 
    } 

    try{ 
     rxtx = manager.openUartDevice(portList.get(0)); 
     configureUartFrame(rxtx); 
    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
}} 

Jemand weiß, was es sein könnte?

+0

Sie könnten viel mehr Hilfe auf SO erhalten, wenn Sie Texttext und damit verbundenen Fehler (kopieren und einfügen) anstelle von einigen Links, die schließlich in wenigen Tagen tot sein wird. Nur ein Gedanke :) –

+0

Ok! Ich habe bearbeitet. thx – Stould

+0

Verbindest du dich direkt mit den RX/TX-Pins (8/10) am RPi3-Header, oder ist das ein USB-TTL-Kabel? Wenn Sie den nativen UART verwenden, haben Sie den Modus korrekt für die Dokumente konfiguriert? https://developer.android.com/things/hardware/raspberrypi.html#configuring_the_uart_mode – Devunwired

Antwort

1

Ich sehe nirgendwo in Ihrem Code, wo eine UartDeviceCallback registriert ist. Wie wird der UART auf neu eingehende Daten abgefragt? Ohne einen registrierten Rückruf müsste Ihre App regelmäßig den UART über UartDevice.read() auf neu eingehende Bytes abfragen, und das sehe ich auch nicht in Ihrem Code. Der einzige Ort, an dem dies zu sein scheint, ist einmal im Aktivitätsrückruf onStart().

Der Rückruf ist ein viel effizienter Ansatz, also würde ich empfehlen, das hinzuzufügen. Für weitere Details, werfen Sie einen Blick auf die UART Peripheral I/O Guide.

+0

Ich fand, was los war, ich verwendete Intel Arduino 101, das eine andere Konfiguration von Arduino Uno verwendet. Mit Arduino Uno hat alles gut funktioniert. Danke für die Antwort, es ist viel besser nutzen Sie den CallBack um Daten abzufragen. Aber ich möchte wirklich wissen, was ist dieser Fehler, wie ich oben erwähnt habe. – Stould