Android 串口数据处理

private void getSerialPort() {        if (mReceiveThread == null) {            mReceiveThread = new ReceiveThread();        }        mReceiveThread.start();    }    //开始处理数据    private void startDecodeData() {        new Thread(new Runnable() {            @Override            public void run() {                while (true) {                    if (mIsAnalyticalData) {                        //解析数据                        decodeData();                        mIsAnalyticalData = !mIsAnalyticalData;                    }                }            }        }).start();    }    //解析数据    private void decodeData() {        if (mIsHaveLeft) {            //添加数据 剩下的数据后移            for (int i = mBufferDataLength - 1; i >= 0; i--) {                mBuffer[i + mLeftLength] = mBuffer[i];            }            for (int i = 0; i < mLeftLength; i++) {                mBuffer[i] = mLeftBuffer[i];            }            mBufferDataLength += mLeftLength;            mIsHaveLeft = !mIsHaveLeft;            mLeftLength = 0;        }        String[] HexArr = DataUtils.ByteArr2HexArr(mBuffer, 0, mBufferDataLength);        int endIndex = 0;        for (int i = 0; i < HexArr.length; i++) {            if ((i < HexArr.length)                    && (i + 1 < HexArr.length)                    && (i + Integer.valueOf(HexArr[i + 1], 16) < HexArr.length)                    && (i + 1 + Integer.valueOf(HexArr[i + 1], 16) < HexArr.length)                    && HexArr[i].equals("5A") && HexArr[i + Integer.valueOf(HexArr[i + 1], 16)].equals("0D")                    && HexArr[i + 1 + Integer.valueOf(HexArr[i + 1], 16)].equals("0A")) {                endIndex = i + 1 + Integer.valueOf(HexArr[i + 1], 16);                StringBuffer stringBuffer = new StringBuffer();                for (int j = i + 4, k = 0; k < ((Integer.valueOf(HexArr[i + 1], 16)) - 4); j++, k++) {                    stringBuffer.append(HexArr[j]);                }                DataBean dataBean = new DataBean(HexArr[i + 2], HexArr[i + 3], stringBuffer.toString());                decodeDataBean(dataBean);                i += Integer.valueOf(HexArr[i + 1], 16) + 1;            }        }        //有剩余的数据        if (endIndex != mBufferDataLength - 1) {            int j = 0;            for (int i = endIndex + 1; i < mBufferDataLength; i++, j++) {                mLeftBuffer[j] = mBuffer[i];            }            mLeftLength = j;            mIsHaveLeft = true;        }    }    //接收串口数据的线程    private class ReceiveThread extends Thread {        @Override        public void run() {            super.run();            //条件判断,只要条件为true,则一直执行这个线程            while (isStart) {                if (inputStream == null) {                    return;                }                byte[] readData = new byte[8192];                try {                    int size = inputStream.read(readData);                    if (size > 0) {                        String readString = DataUtils.ByteArrToHex(readData, 0, size);                        for (int i = 0, j = mTempBufferStartPosition; i < size; i++, j++) {                            mTempBuffer[j] = readData[i];                        }                        mTempBufferStartPosition += size;                        mTempAddCount++;                        //Log.e("LOG_TAG", "" + mTempAddCount);                        if (mTempAddCount >= mReceiveMinAmount && (!mIsAnalyticalData)) {                            //可以将临时缓冲区的数据copy到处理缓冲区                            for (int i = 0; i < mTempBufferStartPosition; i++) {                                mBuffer[i] = mTempBuffer[i];                            }                            mBufferDataLength = mTempBufferStartPosition;                            mIsAnalyticalData = !mIsAnalyticalData;                            //各种counter归零                            mTempAddCount = 0;                            mTempBufferStartPosition = 0;                        }                    }                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

更多相关文章

  1. 微信稳居Android(安卓)App排行榜4月份国内榜首
  2. Android连接mysql demo_Android实现登陆功能,Android与服务器数据
  3. Android(安卓)关于 如何使用外界导入的数据库文件
  4. android中Json数据保存方式
  5. Android腾讯微薄客户端开发十一:博主的粉丝
  6. Android(安卓)数据存储与读取:文件
  7. Android串口设备的应用实现方案以及与WEB的交互
  8. Android省市区三级联动滚轮选择(真实项目中提取出来的组件)
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android(安卓)pm命令使用方法
  2. Android这可能是当今最火,功能最全的快速
  3. C4droid – a C compiler for Android
  4. 2011.06.09——— android 1.6 launcher
  5. Android(安卓)使用HTTPClient调用Web请求
  6. Android在做webview与js交互,线程变化以及
  7. 如何制作Jar包并在android中调用jar包
  8. Android中SQLite操作示例
  9. unable to access android sdk add-on li
  10. Bluebox Security最新提报Android漏洞的