Android事物3无法从Raspberry PI 3上的rxtx读取

时间:2017-04-11 16:36:15

标签: android arduino raspberry-pi3 android-things

我有一个Arduino配置为继续在TX端口上写东西,它通过Android Things Developer预览3连接到我的Raspberry Pi 3(我确信RX / TX电缆配置正确且电压正常)。< / p>

我正在尝试使用Android Things libs的PeripheralManagerService读取数据和写入数据。

启动应用时出错:

  

04-11 16:26:13.665 163-163 /? I / peripheralman:type = 1400 audit(0.0:44):avc:denied {read write} for name =“ttyAMA0”dev =“tmpfs”ino = 1203 scontext = u:r:peripheralman:s0 tcontext = u:object_r: device:s0 tclass = chr_file permissive = 1

     

04-11 16:26:13.665 163-163 /? I / peripheralman:type = 1400 audit(0.0:45):avc:denied {open} for path =“/ dev / ttyAMA0”dev =“tmpfs”ino = 1203 scontext = u:r:peripheralman:s0 tcontext = u: object_r:device:s0 tclass = chr_file permissive = 1

     

04-11 16:26:13.665 163-163 /? I / peripheralman:type = 1400 audit(0.0:46):avc:denied {ioctl} for path =“/ dev / ttyAMA0”dev =“tmpfs”ino = 1203 ioctlcmd = 5401 scontext = u:r:peripheralman:s0 tcontext = u:object_r:device:s0 tclass = chr_file permissive = 1

我的代码:

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

有人知道它会是什么吗?

1 个答案:

答案 0 :(得分:1)

我没有在代码中看到注册了UartDeviceCallback的任何地方。您如何轮询UART以获取新的传入数据?如果没有注册回调,您的应用程序将需要通过UartDevice.read()定期轮询UART以获取新的传入字节,我也不会在您的代码中看到它。这个似乎被调用的唯一地方是onStart()活动回调中的一次。

回调是一种更有效的方法,所以我建议添加它。有关详细信息,请查看UART Peripheral I/O Guide