Android平板电脑上没有从com到usb的消息

Android平板电脑上没有从com到usb的消息,android,serial-port,usb,nmea,Android,Serial Port,Usb,Nmea,我需要帮助! 我需要在Android平板电脑上通过COM端口将一些NMEA数据从设备发送到USB端口。当我将我的silab CP210x UART桥接器连接到平板电脑时,它会自动启动我的程序,但当我尝试发送一些数据时,我的程序看不到它。我正在为android库()使用usb串行接口。我遵循github的所有指示。 这是我的密码: package com.example.simplexyplotactivity; import java.io.IOException; import andro

我需要帮助! 我需要在Android平板电脑上通过COM端口将一些NMEA数据从设备发送到USB端口。当我将我的silab CP210x UART桥接器连接到平板电脑时,它会自动启动我的程序,但当我尝试发送一些数据时,我的程序看不到它。我正在为android库()使用usb串行接口。我遵循github的所有指示。 这是我的密码:

package com.example.simplexyplotactivity;

import java.io.IOException;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.PointF;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbManager;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.util.EventLog;
import android.util.FloatMath;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.WindowManager;

import java.util.List;
import java.util.Observable;
import java.util.Observer;

import com.androidplot.Plot;
import com.androidplot.ui.SizeLayoutType;
import com.androidplot.ui.SizeMetrics;
import com.androidplot.xy.BoundaryMode;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.PointLabelFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XYPlot;
import com.hoho.android.usbserial.driver.UsbSerialDriver;
import com.hoho.android.usbserial.driver.UsbSerialProber;
import com.hoho.android.usbserial.driver.UsbSerialPort;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;

import android.hardware.usb.UsbDevice;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

public class Simple_xy_plot_example extends Activity implements OnTouchListener {
    private int com_cnt;
    private String buf;
    private String[] fields;
    private int buf_max_length;
    private int buf_idx;
    private boolean buf_started;
    public float course=0;
    SoundPool sound_pool;
    int rot_sound_ID;
    private static final String ACTION_USB_PERMISSION ="com.prolific.pl2303hxdsimpletest.USB_PERMISSION";
    private static final int SERIES_SIZE = 200;
    private XYPlot plotOne;
    private SimpleXYSeries series1 = null;
    private PointF minXY;
    private PointF maxXY;
    NMEA_Receiver data;
    private Thread myThread;
    private String str;
    private String stroka;
    float zoomRatio = 2, leftBoundary, rightBoundary;
    USB2ComDetector mUSB2ComDetector;
    Handler CBhandler;
    private UsbManager usb_manager;
    private static UsbSerialPort ser_port = null;
    ComponentName service_name;
    byte temp_buf[]=new byte[4096];


    private class MyPlotUpdater implements Observer {
        Plot plot;

        public MyPlotUpdater(Plot plot) {
            this.plot = plot;
        }

        @Override
        public void update(Observable o, Object arg) {
            plot.redraw();
        }
    }

    private boolean USB2ComConnect() {
        /*if (ser_port != null) return false;
        List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usb_manager);
        if (availableDrivers.isEmpty()) {
        } else {
            // open connection to first avail. driver
            UsbSerialDriver driver = availableDrivers.get(0);
            UsbDeviceConnection connection = usb_manager.openDevice(driver.getDevice());
            if (connection == null) {
            } else {                                                      // Read some data! Most have just one port (port 0).
                List<UsbSerialPort> myPortList = driver.getPorts();
                UsbSerialPort port = myPortList.get(0);
                try {
                    port.open(connection);
                    port.setParameters(4800, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);     // sets baud rate,databits, stopbits, & parity
                    byte temp_buf[]=new byte[4096]; // 1 byte per pressure sensor, plus 2 bytes for carriage return
                    int numBytesRead = port.read(temp_buf, 1000);
                    String arduinoData = new String(temp_buf, "US-ASCII");
                    Toast.makeText(getApplicationContext(), arduinoData, Toast.LENGTH_SHORT).show();   // Toast debugging
                } catch (IOException e) {
                    Toast.makeText(getApplicationContext(), "Error: couldn't read data from USB device", Toast.LENGTH_LONG).show(); // Toast debugging
                }
            }
        }

       /* List<UsbSerialPort> ports=availableDrivers.get(0).getPorts();
        ser_port=ports.get(0);
        UsbDeviceConnection connection=usb_manager.openDevice(ser_port.getDriver().getDevice());
        try {
            ser_port.open(connection);
            ser_port.setParameters(4800, UsbSerialPort.DATABITS_8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
            ser_port.purgeHwBuffers(true, true);
        } catch (IOException e) {
            Log.e("NMEAParser", "Cant open or set parameter to serial port");
            e.printStackTrace();
            return true;
        }*/

        return false;
    }
    //**********
    public boolean IsCOMopened(){return ser_port!=null?true:false;}

    private MyPlotUpdater plotUpdater;

    public void onResume() {
// kick off the data generating thread:
        myThread = new Thread(data);
        myThread.start();
        super.onResume();
      //  try {
//            data.EnableRec(true);
     //   } catch (IOException e) {
            // TODO Auto-generated catch block
      //      e.printStackTrace();
     //   }
    }
    public void stopThread() {
        keepRunning = false;
    }
    @Override
    public void onPause() {
//        data.stopThread();
        super.onPause();
    }

    private boolean keepRunning = false;

    class NMEA_Receiver implements Runnable {
        private static final int SAMPLE_SIZE = 30;
        public int k = 1;
        private int kk = 1;
        private UsbSerialDriver driver;
        private boolean rec_enabled=false;//enable/disable when cable plug in/off
        private boolean rec_alive=true;//to terminate thread when stop app
        byte rec_buf[]=new byte[256];
        boolean rec_started=false;
        boolean trans_started;
        private boolean buf_started;
        private String buf;
        int rec_idx=0;

        NMEA_Receiver(UsbSerialDriver driver){
            this.driver=driver;
        }

        public void stopThread() {
            keepRunning = false;
        }

        synchronized private void SuspendRec(){
        }

        synchronized public void EnableRec(boolean en) throws IOException {
            rec_enabled = en;
            UsbDevice dev;
            if (en) {
                try {
                    //driver.open();
                    //driver.setBaudRate(4800);
                }
                catch (NullPointerException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            else {
//driver.close();
            }
        }
// ***********************************************************************************

        // ***********************************************************************************
        String GetRecBuf(){
            return new String(rec_buf);
        }
        // ***********************************************************************************
        public int Transmit(String tr_buf){
            return 1;
        }
        // ***********************************************************************************
        public boolean IsCOMMConnected(){
// return mPL2303.isConnected();
            return false;
        }

        public void run() {
            //byte temp_buf[]=new byte[4096];
            int yy1;
            int yy2;
            int yy3;
            int yy4;
            int yy5;
            int i=0;
            int length=0;
            try {
                length=ser_port.read(temp_buf, 1000);
            } catch (Exception e) {
                e.printStackTrace();

            }

            String str2;
            String str3, str4, str5;
            boolean terminate=false;
            keepRunning = true;
            while (keepRunning) {
                str5=temp_buf.toString();
                Toast toast = Toast.makeText(getApplicationContext(),
                    str5, Toast.LENGTH_SHORT);
                toast.show();
                for(int k=0;k<length;k++){
                    if (temp_buf[0]=='$') {
                        buf_started = true;
                    }
                    if(buf_started){
                        buf+=(char)temp_buf[k];
                        if(temp_buf[k]=='\n'){
                            str = buf;
                            yy1 = Character.getNumericValue(str.charAt(7));
                            if (str.charAt(8) == '.') {
                               str3 = String.valueOf(str.charAt(8));
                               str2 = "" + yy1 + str3;
                               } else {
                                    yy2 = Character.getNumericValue(str.charAt(8));
                                    str2 = "" + yy1 + yy2;
                               }
                               if (str.charAt(9) == '.') {
                                   str4 = String.valueOf(str.charAt(9));
                                   str2 = str2 + str4;
                               } else {
                                   if ((str.charAt(9) >= '0' && str.charAt(9) <= '9')) {
                                      yy3 = Character.getNumericValue(str.charAt(9));
                                      str2 = str2 + yy3;
                                   }
                               }
                               if (str.charAt(10) == '.') {
                                   str4 = String.valueOf(str.charAt(10));
                                   str2 = str2 + str4;
                               } else if ((str.charAt(10) >= '0' && str.charAt(10) <= '9')) {
                                   yy4 = Character.getNumericValue(str.charAt(10));
                                   str2 = str2 + yy4;
                               }
                               if ((str.charAt(11) >= '0' && str.charAt(11) <= '9')) {
                                   yy5 = Character.getNumericValue(str.charAt(11));
                                   str2 = str2 + yy5;
                               }
                               course = Float.parseFloat(str2); //добавить необходимое число
                               kk++;
                               series1.addLast(kk, course);
                               plotOne.setRangeLabel(String.valueOf(course));
                               plotOne.redraw();// для выведения глубины
                            }
                        }
                    }
                }
            }


        public Number getY(int series, int max) {
            return 1;
        }

    }
    public class USB2ComDetector extends BroadcastReceiver{

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            //try {
                //data.EnableRec(false);
            //} catch (IOException e) {
                // TODO Auto-generated catch block
            //    e.printStackTrace();
           // }

        }

    }
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple_xy_plot_example);

//        USB2ComConnect();
  //      try{
   //    USB2ComConnect();}
   //    catch (NullPointerException e){
  //          e.printStackTrace();
  //      }
       // UsbManager usb_mngr=(UsbManager)getSystemService(Context.USB_SERVICE);
       // List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usb_mngr);
        //if(availableDrivers.isEmpty()==false){
        //    List<UsbSerialPort> ports=availableDrivers.get(0).getPorts();
        //    UsbDeviceConnection connection=usb_mngr.openDevice(ports.get(0).getDriver().getDevice());
      //  }
//
        //UsbSerialDriver driver = UsbSerialProber.getDefaultProber().findAllDrivers(usb_manager);
        //data = new NMEA_Receiver();
        try {
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED.isEmpty()){
                Toast toast = Toast.makeText(getApplicationContext(),
                        "FAIL", Toast.LENGTH_SHORT);
                toast.show();
            }

            //try {
            //    data.EnableRec(true);
            //} catch (IOException e) {
             //   // TODO Auto-generated catch block
             //   e.printStackTrace();}
        } catch (NullPointerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
        List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
        if (availableDrivers.isEmpty()) {
            return;
        }
        UsbSerialDriver driver = availableDrivers.get(0);
        UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
        if (connection == null) {

            return;
        }
                                                          // Read some data! Most have just one port (port 0).
            List<UsbSerialPort> myPortList = driver.getPorts();
            UsbSerialPort port = myPortList.get(0);
            try {
                port.open(connection);
                port.setParameters(4800, 8, UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE);     // sets baud rate,databits, stopbits, & parity
            } catch (IOException e) {
                Toast.makeText(getApplicationContext(),"Error: couldn't read data from USB device",Toast.LENGTH_LONG).show(); // Toast debugging
            }

        mUSB2ComDetector=new USB2ComDetector();
        IntentFilter filter=new IntentFilter();
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        registerReceiver(mUSB2ComDetector,filter);
        sound_pool=new SoundPool(1, AudioManager.STREAM_MUSIC,0);
        rot_sound_ID=sound_pool.load("/system/media/audio/ui/VideoRecord.ogg",1 );
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

//plot setup
        plotOne = (XYPlot) findViewById(R.id.myFirstXYPlot);
        plotOne.setOnTouchListener(this);
        plotOne.getGraphWidget().setTicksPerRangeLabel(2);
        plotOne.getGraphWidget().setTicksPerDomainLabel(2);
        plotOne.getGraphWidget().setRangeLabelWidth(25);
//plotOne.setRangeLabel("");
        plotOne.setDomainLabel("");
        plotOne.setBorderStyle(Plot.BorderStyle.NONE, null, null);
        plotOne.getLayoutManager().remove(plotOne.getLegendWidget());
        plotOne.getGraphWidget().setSize(new SizeMetrics(0,SizeLayoutType.FILL,
                0, SizeLayoutType.FILL));
        plotOne.setPlotMargins(0,0,0,0);

//********
//series setup
        series1 = new SimpleXYSeries("PARAM");
        series1.useImplicitXVals();
        LineAndPointFormatter line1 = new LineAndPointFormatter();
        line1.setPointLabelFormatter(new PointLabelFormatter());
        plotOne.addSeries(series1, line1);
        plotOne.redraw();
        plotOne.calculateMinMaxVals();
        minXY = new PointF(plotOne.getCalculatedMinX().floatValue(),
                plotOne.getCalculatedMinY().floatValue());
        maxXY = new PointF(plotOne.getCalculatedMaxX().floatValue(),
                plotOne.getCalculatedMaxY().floatValue());
        leftBoundary = series1.getX(0).floatValue();
        rightBoundary = series1.getX(series1.size() - 1).floatValue();
    }

    //*****************
// Definition of the touch states
    static final int NONE = 0;
    static final int ONE_FINGER_DRAG = 1;
    static final int TWO_FINGERS_DRAG = 2;
    int mode = NONE;

    PointF firstFinger;
    float distBetweenFingers;
    boolean stopThread = false;

    @Override
    public boolean onTouch(View arg0, MotionEvent event) {
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN: // Start gesture
                firstFinger = new PointF(event.getX(), event.getY());
                mode = ONE_FINGER_DRAG;
                stopThread = true;
                break;
            case MotionEvent.ACTION_POINTER_UP:
            case MotionEvent.ACTION_UP:
                mode = NONE;
                break;
            case MotionEvent.ACTION_POINTER_DOWN: // second finger
                distBetweenFingers = spacing(event);
// the distance check is done to avoid false alarms
                if (distBetweenFingers > 5f) {
                    mode = TWO_FINGERS_DRAG;
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (mode == ONE_FINGER_DRAG) {
                    PointF oldFirstFinger = firstFinger;
                    firstFinger = new PointF(event.getX(), event.getY());
                    scroll(oldFirstFinger.x - firstFinger.x);
                    plotOne.setDomainBoundaries(minXY.x, maxXY.x,
                            BoundaryMode.FIXED);
                    plotOne.redraw();

                } else if (mode == TWO_FINGERS_DRAG) {
                    float oldDist = distBetweenFingers;
                    distBetweenFingers = spacing(event);
                    zoom(oldDist / distBetweenFingers);
                    plotOne.setDomainBoundaries(minXY.x, maxXY.x,
                            BoundaryMode.FIXED);
                    plotOne.redraw();
                }
                break;
        }
        return true;
    }

    private void zoom(float scale) {
        float domainSpan = maxXY.x - minXY.x;
        float oldMax = maxXY.x;
        float oldMin = minXY.x;
        float domainMidPoint = maxXY.x - (domainSpan / 2.0f);
        float offset = domainSpan * scale / 2.0f;
        minXY.x = domainMidPoint - offset;
        maxXY.x = domainMidPoint + offset;
        float newSpan = maxXY.x - minXY.x;
        if (newSpan < (float)5) {
            minXY.x = oldMin;
            maxXY.x = oldMax;
        }

        if (minXY.x < leftBoundary) {
            minXY.x = leftBoundary;
            maxXY.x = leftBoundary + domainSpan * zoomRatio;
            if (maxXY.x > series1.getX(series1.size() - 1).floatValue())
                maxXY.x = rightBoundary;
        }
        if (maxXY.x > series1.getX(series1.size() - 1).floatValue()) {
            maxXY.x = rightBoundary;
            minXY.x = rightBoundary - domainSpan * zoomRatio;
            if (minXY.x < leftBoundary) minXY.x = leftBoundary;
        }
    }

    private void scroll(float pan) {
        float domainSpan = maxXY.x - minXY.x;
        float step = domainSpan / plotOne.getWidth();
        float offset = pan * step;
        minXY.x = minXY.x + offset;
        maxXY.x = maxXY.x + offset;

        if (minXY.x < leftBoundary) {
            minXY.x = leftBoundary;
            maxXY.x = leftBoundary + domainSpan;
        }
        if (maxXY.x > series1.getX(series1.size() - 1).floatValue()) {
            maxXY.x = rightBoundary;
            minXY.x = rightBoundary - domainSpan;
        }
    }

    private float spacing(MotionEvent
                                  event) {
        float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return FloatMath.sqrt(x * x + y * y);
    }
}
package com.example.simplexyplotactivity;
导入java.io.IOException;
导入android.app.Activity;
导入android.content.BroadcastReceiver;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.content.IntentFilter;
导入android.graphics.PointF;
导入android.hardware.usb.UsbDeviceConnection;
导入android.hardware.usb.UsbManager;
导入android.media.AudioManager;
导入android.media.SoundPool;
导入android.os.Bundle;
导入android.util.EventLog;
导入android.util.FloatMath;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.view.WindowManager;
导入java.util.List;
导入java.util.Observable;
导入java.util.Observer;
导入com.androidplot.Plot;
导入com.androidplot.ui.SizeLayoutType;
导入com.androidplot.ui.SizeMetrics;
导入com.androidplot.xy.BoundaryMode;
导入com.androidplot.xy.LineAndPointFormatter;
导入com.androidplot.xy.PointLabelFormatter;
导入com.androidplot.xy.SimpleXYSeries;
导入com.androidplot.xy.XYPlot;
导入com.hoho.android.usbserial.driver.UsbSerialDriver;
导入com.hoho.android.usbserial.driver.UsbSerialProber;
导入com.hoho.android.usbserial.driver.UsbSerialPort;
导入android.hardware.usb.UsbDevice;
导入android.hardware.usb.UsbManager;
导入android.hardware.usb.UsbDevice;
导入android.os.Handler;
导入android.os.Message;
导入android.widget.Toast;
公共类Simple_xy_plot_示例将活动实现扩展到了TouchListener{
私人国际公司;
私有字符串buf;
私有字符串[]字段;
私有内部最大长度;
私人国际机场;
私有布尔buf_启动;
公共浮动航线=0;
声水池声水池;
int rot_sound_ID;
私有静态最终字符串操作\u USB\u PERMISSION=“com.prolific.pl2303hxdsimpletest.USB\u PERMISSION”;
专用静态最终整数系列_尺寸=200;
私有xyplotone;
私有SimpleXYSeries系列1=null;
私有点f minXY;
私有点f maxXY;
NMEA_接收机数据;
私有线程读取;
私有字符串str;
私有字符串stroka;
float zoomRatio=2,leftBoundary,righboundary;
USB2ComDetector mUSB2ComDetector;
处理程序CBhandler;
专用usb管理器usb_管理器;
专用静态UsbSerialPort ser_port=null;
组件名称服务名称;
字节temp_buf[]=新字节[4096];
私有类MyPlotUpdater实现了Observer{
情节;
公共MyPlotUpdater(绘图){
this.plot=绘图;
}
@凌驾
公共无效更新(可观察o,对象arg){
plot.redraw();
}
}
专用布尔值USB2ComConnect(){
/*if(ser_port!=null)返回false;
List availableDrivers=UsbSerialProber.getDefaultProber().findAllDrivers(usb_管理器);
if(availableDrivers.isEmpty()){
}否则{
//打开与first avail.driver的连接
UsbSerialDriver driver=availableDrivers.get(0);
usbdeviconnection connection=usb_manager.openDevice(driver.getDevice());
if(连接==null){
}else{//读取一些数据!大多数只有一个端口(端口0)。
List myPortList=driver.getPorts();
UsbSerialPort port=myPortList.get(0);
试一试{
端口。打开(连接);
port.setParameters(4800,8,UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE);//设置波特率、数据位、停止位和奇偶校验
字节temp_buf[]=新字节[4096];//每个压力传感器1个字节,外加2个用于回车的字节
int numBytesRead=端口读取(温度为1000);
String arduinoData=新字符串(temp_buf,“US-ASCII”);
Toast.makeText(getApplicationContext(),arduinoData,Toast.LENGTH_SHORT).show();//Toast调试
}捕获(IOE异常){
Toast.makeText(getApplicationContext(),“错误:无法从USB设备读取数据”,Toast.LENGTH_LONG.show();//Toast调试
}
}
}
/*List ports=availableDrivers.get(0.getPorts();
ser_port=ports.get(0);
usbdeviconnection connection=usb_manager.openDevice(ser_port.getDriver().getDevice());
试一试{
ser_端口打开(连接);
ser_port.setParameters(4800,UsbSerialPort.DATABITS_8,UsbSerialPort.STOPBITS_1,UsbSerialPort.PARITY_NONE);
ser_端口purgeHwBuffers(真,真);
}捕获(IOE异常){
Log.e(“nMessager”,“无法打开或将参数设置为串行端口”);
e、 printStackTrace();
返回true;
}*/
返回false;
}
//**********
公共布尔IsCOMopened(){return ser_port!=null?true:false;}
私有MyPlotUpdater plotUpdater;
恢复时公开作废(){
//启动数据生成线程:
myThread=新线程(数据);
myThread.start();
super.onResume();
//试一试{
//data.EnableRec(真);
//}捕获(IOE异常){
//TODO自动生成的捕捉块
//e.printStackTrace();
//   }
}
公共void stopThread(){
保持修剪=错误;
}
@凌驾
公共无效暂停(){
//data.stopThread();
super.onPause();
}
私有布尔基