2016-03-30 8 views
1

下記のリンクhttps://github.com/felHR85/SerialPortExampleのUsbSerialの例を使用しています。写真に表示されているデバイスからUSB経由でデータを受信したい。Usbserialを使用してUSB経由でデータを受信できませんでした。

デバイスは、基本的にシリアルポートを介してカウンタデータを送信しているカウンタマシンです。

pic 1 pic 2

私はそれから、デバイスと開いているポートを接続することができますが、それからのデータストリームを読み取ることができません。以下は使用されるコードです。コードは、私はそれが少し遅れて、しかしちょうど同様の問題に遭遇するかもしれない他の人を助けるために、あなたはあなたの問題への解決策を見つけたことを知っている任意のエラーに

Mainactivityクラス

public class MainActivity extends AppCompatActivity { 

    /* 
    * Notifications from UsbService will be received here. 
    */ 
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      switch (intent.getAction()) { 
       case UsbService.ACTION_USB_PERMISSION_GRANTED: // USB PERMISSION GRANTED 
        Toast.makeText(context, "USB Ready", Toast.LENGTH_SHORT).show(); 
        break; 
       case UsbService.ACTION_USB_PERMISSION_NOT_GRANTED: // USB PERMISSION NOT GRANTED 
        Toast.makeText(context, "USB Permission not granted", Toast.LENGTH_SHORT).show(); 
        break; 
       case UsbService.ACTION_NO_USB: // NO USB CONNECTED 
        Toast.makeText(context, "No USB connected", Toast.LENGTH_SHORT).show(); 
        break; 
       case UsbService.ACTION_USB_DISCONNECTED: // USB DISCONNECTED 
        Toast.makeText(context, "USB disconnected", Toast.LENGTH_SHORT).show(); 
        break; 
       case UsbService.ACTION_USB_NOT_SUPPORTED: // USB NOT SUPPORTED 
        Toast.makeText(context, "USB device not supported", Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }; 
    private UsbService usbService; 
    private TextView display; 
    private EditText editText; 
    private MyHandler mHandler; 
    private final ServiceConnection usbConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName arg0, IBinder arg1) { 
      usbService = ((UsbService.UsbBinder) arg1).getService(); 
      usbService.setHandler(mHandler); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName arg0) { 
      usbService = null; 
     } 
    }; 

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

     mHandler = new MyHandler(this); 
     display = (TextView) findViewById(R.id.textView1); 
     editText = (EditText) findViewById(R.id.editText1); 
     Button sendButton = (Button) findViewById(R.id.buttonSend); 
     sendButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (!editText.getText().toString().equals("")) { 
        String data = editText.getText().toString(); 
        if (usbService != null) { // if UsbService was correctly binded, Send data 
         display.append(data); 
         usbService.write(data.getBytes()); 
        } 
       } 
      } 
     }); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     setFilters(); // Start listening notifications from UsbService 
     startService(UsbService.class, usbConnection, null); // Start UsbService(if it was not started before) and Bind it 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     unregisterReceiver(mUsbReceiver); 
     unbindService(usbConnection); 
    } 

    private void startService(Class<?> service, ServiceConnection serviceConnection, Bundle extras) { 
     if (!UsbService.SERVICE_CONNECTED) { 
      Intent startService = new Intent(this, service); 
      if (extras != null && !extras.isEmpty()) { 
       Set<String> keys = extras.keySet(); 
       for (String key : keys) { 
        String extra = extras.getString(key); 
        startService.putExtra(key, extra); 
       } 
      } 
      startService(startService); 
     } 
     Intent bindingIntent = new Intent(this, service); 
     bindService(bindingIntent, serviceConnection, Context.BIND_AUTO_CREATE); 
    } 

    private void setFilters() { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(UsbService.ACTION_USB_PERMISSION_GRANTED); 
     filter.addAction(UsbService.ACTION_NO_USB); 
     filter.addAction(UsbService.ACTION_USB_DISCONNECTED); 
     filter.addAction(UsbService.ACTION_USB_NOT_SUPPORTED); 
     filter.addAction(UsbService.ACTION_USB_PERMISSION_NOT_GRANTED); 
     registerReceiver(mUsbReceiver, filter); 
    } 

    /* 
    * This handler will be passed to UsbService. Data received from serial port is displayed through this handler 
    */ 
    private static class MyHandler extends Handler { 
     private final WeakReference<MainActivity> mActivity; 

     public MyHandler(MainActivity activity) { 
      mActivity = new WeakReference<>(activity); 
     } 

     @Override 
     public void handleMessage(Message msg) { 
      mActivity.get().display.append("Handle:"); 
      switch (msg.what) { 
       case UsbService.MESSAGE_FROM_SERIAL_PORT: 
        String data = (String) msg.obj; 
        mActivity.get().display.append(data); 
        break; 
      } 
     } 
    } 
} 

答えて

0

を与えていないですか?そうでなければ、あなたが参照した例で説明したように、サービス(USBService.java)に対応する他のjavaファイルを見ることができません。同じファイルには、何がうまくいかないかを調べるためにデバッグしたいコードスニペットが含まれています(バイトから文字列への変換に問題がある可能性があります)。お役に立てれば。

/* 
* Data received from serial port will be received here. Just populate onReceivedData with your code 
* In this particular example. byte stream is converted to String and send to UI thread to 
* be treated there. 
*/ 
private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() 
{ 
    @Override 
    public void onReceivedData(byte[] arg0) 
    { 
     try 
     { 
      String data = new String(arg0, "UTF-8"); 
      if(mHandler != null) 
       mHandler.obtainMessage(MESSAGE_FROM_SERIAL_PORT,data).sendToTarget(); 
     } catch (UnsupportedEncodingException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}; 
関連する問題