当前位置: 首页 > news >正文

YModem在Android上的实现(四)

主要问题解决基于Ymodem的library:

一:AS debug 优化使用以及 log使用

二:函数没有正常流程走

1)一开始流程没有走对,主要是蓝牙连接的雷达设备返回数据时,没有调用onDataReceivedFromBLE(bytes)方法,调用onDataReceivedFromBLE(bytes)方法后会进一步执行public void onReceiveData(byte[] respData),具体里面的case(如:case STEP_FILE_NAME,case STEP_FILE_BODY,case STEP_EOT)会进一步 执行对应的handle方法(如:handleFileName(respData),handleFileBody(respData),handleEOT(respData)等);前面的handle系列的方法,主要会对返回的值如:C,ACK,NAK进行分值处理!!

//读取蓝牙设备发出来的数据回调
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {super.onCharacteristicChanged(gatt, characteristic);//接收数据bytes = characteristic.getValue();//针对YModem协议返回值的响应MainActivity.onDataReceivedFromBLE(bytes);Log.d("XTQ_YModem_1028", "[RCV]data="+ Arrays.toString(bytes));
}

三:固件升级的YModem协议的使用与调试

主要是第一次发送EOT,设备返回NAK,第二次发送EOT,设备返回ACK&C的这一部分与实际的原始library的代码的区别;基于对协议规范进行逻辑修改!

三:BLE蓝牙传输的弊端导致传输的中断,进一步的需要加入延时

writeCharacteristic.setValue(data);
Log.d("XTQ_YModem_1031","data长度!!!"+data.length);
mBluetoothGatt.writeCharacteristic(writeCharacteristic);//在发送数据的地方加入延时
try {Thread.sleep(20);
}catch(InterruptedException e){e.printStackTrace();
}

四:android文件的权限报错,

具体报错内容为: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)

Step 1:修改manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Step 2:MainActivity中添加

private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE };//确认权限的方法
public static void verifyStoragePermissions(Activity activity) {// Check if we have write permissionint permission = ActivityCompat.checkSelfPermission(activity,Manifest.permission.WRITE_EXTERNAL_STORAGE);if (permission != PackageManager.PERMISSION_GRANTED) {// We don't have permission so prompt the userActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);}
}

http://www.dtcms.com/a/290773.html

相关文章:

  • 自动化测试概念和时机
  • Java -- 自定义异常--Wrapper类--String类
  • MySQL表的基础操作
  • 第三章自定义检视面板_创建自定义编辑器类_编扩展默认组件的显示面板(本章进度6/9)
  • 奥比中光深度相机开发
  • java学习day6 + leetcode31 下一个排列
  • 面向对象编程 - 高级篇一
  • 力扣面试150题--搜索二维矩阵
  • TPAMI 2025 | 空间频率调制(SFM),深度学习语义分割的细节守护者
  • uniapp 输入时动态修改值(如含单位)光标被强制移至末尾
  • vxe-table 通过配置 ajax 方式自动请求数据,适用于简单场景的列表
  • K8s 集群CoreDNS监控告警最佳实践
  • Django Ninja
  • 病历数智化3分钟:AI重构医院数据价值链
  • 【Prometheus+Grafana篇】监控通过Keepalived实现的MySQL HA高可用架构
  • 安全测试学习
  • Python并发编程:突破GIL枷锁,高效利用多核CPU
  • c# 获取指定路径盘的可用空间
  • 2025年一区SCI-回旋镖气动椭圆优化算法Boomerang Aerodynamic Ellipse-附Matlab免费代码
  • 大根堆,小根堆,双指针
  • ELN和LIMS的区别
  • 【LeetCode 热题 100】207. 课程表——DFS+三色标记
  • 原型设计模式
  • [Plecs基础知识系列] 基于Plecs的半导体热仿真方法(实战篇)_建立热路模型与仿真
  • 多能量CT扫描性能模体的详细讲解
  • 小飞电视:开启智能娱乐新视界
  • 优思学院:精益制造的工具与方法有什么区别?
  • 2025三掌柜赠书活动第二十五期 网络安全应急响应实战
  • Web3.0 能为你带来哪些实质性的 改变与突破
  • Web LLM 安全剖析:以间接提示注入为核心的攻击案例与防御体系