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

YModem在Android上的实现(二)

本节着重介绍CRC校验部分的内容

一:总思路

当前思路是把bin的内容和CRC合并成新的文件流

二:具体如何合并  

crcArray = getByteArray();
byte[] allData = mergeArrays(bytesInputStream1, crcArray);
inputStream = new ByteArrayInputStream(allData);

                
三:详解二中参数

二中的合并是通过两个实参(均为byte数组)完成的,bin和CRC,三中介绍bin,四中捋好CRC

3.1:bin文件,先拿到文件流

下面的是YModem的构造方法,当升级的bin存在手机内部,实际路径在创建YModem对象时,作为实参传入并初始化

public YModem(Context context, String filePath,String fileNameString, String fileMd5String,YModemListener listener) {this.filePath = filePath;this.fileNameString = fileNameString;this.fileMd5String = fileMd5String;this.mContext = context;this.listener = listener;}

如果升级的bin文件放在APP的外部通过手机进行数据存储,则通过下面的方法拿到bin文件的文件流

InputStream inputStream1 = YModemUtil.getInputStream(mContext, filePath);

如果升级的bin文件放在APP的内部,则通过下面的方法拿到bin文件的文件流

InputStream inputStream1 = mContext.getAssets().open("radar-sensor-firmware_weifu_change_name.bin");

  3.2:bin文件在拿到文件流后再转换成byte数组

//转换成byte数组    
bytesInputStream1 = toByteArray(inputStream1);

                
四:CRC的流程  

说明:
FileStreamThread.java中的变量fileByteSize和fileAndCrcSize两个在赋值时不是很准确,但是不影响升级,这两个变量并没有重要的实际使用价值


 
4.1具体CRC计算流程


【4.1.1】
 CrcCalculate.calculateCrcArray()--->crcDebugArray
 直接调用函数得到最原始的CRC数组,一个元素32字节
          

 【4.1.2】
CrcCalculate.oneToFour(crcDebugArray[j])--->fourArray--->
将先前得到的CRC数组的元素,一个32位拆成8位转uint8,一个元素拆分成四个
            
 【4.1.3】
forOriginalIntArray--->originalIntArray--->functionByteArray
得到uint8 8字节的整形数组后在转换为byte数组            


4.2crc的byte数组最终和bin的byte数组合并

crcArray = getByteArray();
上面4.1最终得到的数组functionByteArray就是getByteArray()方法的返回值,
进而赋值给crcArray,
最终crcArray作为实参传入,得到bin+CRC合并后的byte数组
byte[] allData = mergeArrays(bytesInputStream1, crcArray)


                          
五:CrcCalculate.calculateCrcArray函数步骤流程

            

参考V45的代码注释

六:CrcCalculate.oneToFour函数步骤流程

            

一个32位拆成8位转uint8

 


http://www.mrgr.cn/news/26005.html

相关文章:

  • Spring模块详解Ⅳ(Spring ORM和Spring Transaction)
  • Win10录屏技巧分享:四款录屏软件推荐!
  • C语言宏参数的使用
  • 内存分配形式介绍,你知道哪些?
  • 【重构数组,形成排列的最大长度】
  • 科技创新驱动未来发展
  • 基于SpringBoot+Vue的个性化视频推荐系统
  • 电容投切开关残余电压怎么释放
  • 鸿蒙OS 资源文件
  • java多线程笔记2
  • 线程--线程同步
  • 怎么看待伦敦银交易的风险与收益?
  • @Data、@NoArgsConstructor和@AllArgsConstructor这三个Lombok注解的含义
  • FunASR 部署
  • postcss-pxtorem实现页面自适应
  • SpringDoc介绍
  • 品牌借势华为三折叠手机上市热点文案
  • 初学51单片机之IO口上下拉电阻相关
  • [产品管理-12]:NPDP新产品开发 - 10 - 组合管理 - 新产品机会的选择
  • ASPP模块笔记