2017-04-11 11 views
1

私はArduinoを使ってTXポートに書き込むように設定しています。これはAndroid Things Developerのプレビュー3で私のRaspberry Pi 3に接続しています(私はRX/TXケーブルは正しく構成され、電圧はOKです)。Android Things 3ラズベリーPI 3のrxtxから読み取れない

Android ThingsのPeripheralManagerServiceを使用してデータを読み込んでデータを書き込もうとしています。

私はアプリ起動時にエラーがあります:

4月11日16:26:13.665 163から163 /を? scottext = u:r:peripheralman:s0 tcontext = u:object_r:name = "ttyAMA0" dev = "tmpfs"のavc:denied {read write}デバイス:s0 tclass = chr_file許容= 1

04-11 16:26:13.665 163-163 /? "/ dev/ttyAMA0" dev = "tmpfs" ino = 1203 scontext = u:r:peripheralman:s0 tcontext = u:オブジェクト_r:デバイス:s0 tclass = chr_file許容= 1

04-11 16:26:13.665 163-163 /? "/ dev/ttyAMA0" dev = "tmpfs" ino = 1203 ioctlcmd = 5401 scontext = u:r:peripheralman:s0 tcontextの場合、I/peripheralman:type = 1400 audit(0.0:46):avc:{ioctl}を拒否しました。 = U:object_r:デバイス:S0 TCLASS = chr_file許容= 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(); 
    } 
}} 

誰かがそれが何ができるか知っていますか?

+0

最終的には数日で死んでしまうリンクの代わりに、テキストコードと関連するエラーを投稿(コピー&ペースト)すると、さらに多くの助けを得ることができます。ただの考え:) –

+0

Ok!私は編集しました。 thx – Stould

+0

RPi3ヘッダーのRX/TXピン(8/10)に直接接続していますか?これはUSB-TTLケーブルですか? ネイティブUARTを使用している場合、ドキュメントごとにモードを正しく設定しましたか? https://developer.android.com/things/hardware/raspberrypi.html#configuring_the_uart_mode – Devunwired

答えて

1

UartDeviceCallbackが登録されているコードのどこにも表示されません。新しい着信データをUARTにどのようにポーリングしていますか?コールバックが登録されていなければ、あなたのアプリケーションは、新しい受信バイトに対してUartDevice.read()経由でUARTを定期的にポーリングする必要があります。これが呼び出されるように思われる唯一の場所は、アクティビティコールバックで一度です(onStart())。

コールバックははるかに効率的なアプローチなので、追加することをお勧めします。詳細については、UART Peripheral I/O Guideをご覧ください。

+0

Arduino Unoとは異なる設定を使用するIntel Arduino 101を使用していました。 Arduino Unoを使用すると、すべて正常に機能しました。答えをありがとう、それはデータをポーリングするコールバックを使用する方がはるかに良いです。しかし、私は本当に私が上記のようにこのエラーが何かを知りたいです。 – Stould

関連する問題