BLE OTA固件加载“应用程序可能在其主线程上做了太多工作”

时间:2014-09-05 03:53:50

标签: android bluetooth

我正在尝试为Bluegiga BLE121LR蓝牙模块进行Over The Air固件更新。

我一直在寻找特色写(它应该是一个write_no_repsonse类型)以及它刚刚挂起并且似乎从while循环中踢出来的地方我得到了#34;应用程序可能在其主线程上做了太多工作。"我的logcat输出中的警告。

确保我的无线连接建立后,我在onResume中执行以下代码。 OTA文件位于assets文件夹中,似乎正确加载到字节数组中。

我非常喜欢新手,我确信这是一个线程约定或者我在这里缺少的东西。有人能指出我正确的方向吗?

try {
                InputStream dis;
                try {
                    dis = getAssets().open("BLE121LR_OTA.ota");
                    byte[] fileData1 = new byte[dis.available()];

                    try {
                        this.wait(200);
                        dis.read(fileData1);
                        int length = fileData1.length;
                        Log.i(TAG, "Length of file: " + length);
                        int i = 0;

                        if (mService != null) {
                            otaDataChar = mService.getCharacteristic(IOPENER_OTA_DATA);
                            otaControlChar = mService.getCharacteristic(IOPENER_OTA_CONTROL);

                            while (i < length) {

                                byte[] byte16 = new byte[16];
                                System.arraycopy(fileData1, i, byte16, 0, 16);
                                Log.e(TAG, "byte16" + getHexString(byte16));
                                otaDataChar.setValue(getHexString(byte16));
                                otaDataChar.setWriteType(4);
                                mConnectedGatt.writeCharacteristic(otaDataChar);
                                Log.e(TAG, "CHAR WRITE");
                                i = i + 16;
                            }
                        } else {
                            Log.e(TAG, "Mservice fucked up.");
                        }
                        Log.e(TAG, "BEGIN FLASH REBOOT");
                        // otaControlChar.setValue("3");
                        // mConnectedGatt.writeCharacteristic(otaControlChar);
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }

                    try {
                        dis.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            } catch (Exception e) {
            }

1 个答案:

答案 0 :(得分:0)

它与线程无关......我试图在null上进行操作。