与其他设备串行通信

时间:2015-01-28 06:57:43

标签: android bluetooth usbserial

我正在开发一个供我自己使用的应用程序。 Android设备与其他设备通信。早些时候我正在通过Bluetooth进行通信,但此刻我正在改为USB通信。我使用ksksue FTDriver。我遇到了思考循环而无法摆脱它:)

基本上,我需要从设备接收固定的6字节数据。 2个数据字节和4个CRC字节。我将1个字节加1并将其添加到其他字节数组,当达到6个字节时,然后将它们重新复制到新的字节数组,并在CRC等于时处理它们。

这是来自蓝牙应用

public void run() {
            byte[] buffer = new byte[1];  // buffer store for the stream
            int bytesAvailable; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    bytesAvailable = mmInStream.read(buffer);

                    System.arraycopy(buffer, 0, input_bytes_from, last, buffer.length);
                    last++;
                    if (last == 6){
                        last = 0;
                        Log.d(TAG,"received "+bytesToHex(input_bytes_from));
                    byte[] data_bytes = new byte[2];
                    byte[] crc_to_compare = new byte[4];

                    for(byte i=0;i<data_bytes.length;i++)data_bytes[i] = input_bytes_from[i];

                    for(int i=0;i<4;i++){
                        crc_to_compare[i] = input_bytes_from[i+data_bytes.length]; 
                       }
                    crc_test(data_bytes,crc_to_compare);

                    }
                }
                  catch (IOException e) {
                    break;
                }
            }

        }
  • 调用bytesAvailable = mmInStream.read(buffer);时字节/ s会发生什么?是否从mmInStream.read复制并删除了一个字节?
  • 有更快更好的方法吗?因为据我所知,逐个字节复制很慢?

1 个答案:

答案 0 :(得分:0)

  • 调用bytesAvailable = mmInStream.read(buffer);时字节/ s会发生什么?是否从mmInStream.read复制并删除了一个字节?

是。从InputStream中删除一个字节,并将该字节复制到buffer

  • 有更快更好的方法吗?因为据我所知,逐个字节复制很慢?

您不需要逐个读取字节。请参阅以下代码。

public void run() {
    // Keep listening to the InputStream until an exception occurs
    while (true) {
        try {
            byte[] data_bytes = new byte[2];
            byte[] crc_to_compare = new byte[4];

            mmInStream.read(data_bytes);
            mmInStream.read(crc_to_compare);

            crc_test(data_bytes, crc_to_compare);
        } catch (IOException e) {
            break;
        }
    }
}

有一个开源框架,用于与其他设备进行串行通信,称为NFCommunicator。

https://github.com/Neofect/NFCommunicator

它可以帮助您创建一个Android应用程序,通过蓝牙SPP等串行协议与其他设备通信,但目前不支持USB连接。