2016-03-30 1 views
1

J'utilise l'exemple UsbSerial suivant à partir du lien https://github.com/felHR85/SerialPortExample. Je veux recevoir des données de plus de usb de l'appareil montré dans la photo.Impossible de recevoir des données via USB à l'aide de l'exemple Usbserial

Le périphérique est essentiellement une machine de compteur qui envoie des données de compteur sur le port série.

pic 1 pic 2

Je suis en mesure de connecter un appareil et un port ouvert de celui-ci, mais incapable de lire flux de données de celui-ci. Voici le code utilisé. le code ne donne aucune erreur

MainActivity classe

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

Répondre

0

Je sais qu'il est peu tard, mais juste pour aider les autres qui pourraient se présenter dans la même question, avez-vous une solution à trouver votre problème? Sinon, je ne peux pas voir l'autre fichier java correspondant au service (USBService.java) comme décrit dans l'exemple référé par vous. Le même fichier contient l'extrait de code suivant que vous souhaitez déboguer pour savoir ce qui ne va pas (peut-être un problème avec la conversion d'octets en chaînes, etc.). J'espère que cela t'aides.

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