背景

根据需求,需要写一个给pixhawk刷固件的工具。根据开源地面站mission planner的源码来改。

MissionPlanner刷固件程序流程


Created with Raphaël 2.2.0开始ProcessFirmware()读取hex固件文件AttemptRebootToBootloader()重启硬件进入刷机状态identify()验证硬件已进入刷机状态currentChecksum()固件校验upload()下载固件结束

子模块简介

ProcessFirmware()

对hex文件进行处理,读取校验等。会用到mission planner 项目里面的Firmware class、fastJSON namespace等。此部分依赖性不高,对应模块贴进去后会提示缺失部分,去missionplanner 源码里面找到相应的添加上即可。粘代码的时候尽量精准找到所需,如果添加上不必要的函数会导致依赖性急剧提升,报错提高,导致贴不完的代码。

identify()

这个函数用于检测pixhawk硬件是否是在等待刷机的状态。

AttemptRebootToBootloader()

先贴出此部分的源代码:

        private void AttemptRebootToBootloader(){string[] allports = SerialPort.GetPortNames();foreach (string port in allports){log.Info(DateTime.Now.Millisecond + " Trying Port " + port);try{using (var up = new Uploader(port, 115200)){up.identify();return;}}catch (Exception ex){log.Error(ex);}}if (MainV2.comPort.BaseStream is SerialPort){try{updateProgress(-1, "Look for HeartBeat");// check if we are seeing heartbeatsMainV2.comPort.BaseStream.Open();MainV2.comPort.giveComport = true;if (MainV2.comPort.getHeartBeat().Length > 0){updateProgress(-1, "Reboot to Bootloader");MainV2.comPort.doReboot(true, false);MainV2.comPort.Close();}else{updateProgress(-1, "No HeartBeat found");MainV2.comPort.BaseStream.Close();CustomMessageBox.Show(Strings.PleaseUnplugTheBoardAnd);}}catch (Exception ex){log.Error(ex);CustomMessageBox.Show(Strings.PleaseUnplugTheBoardAnd);}}}

注意到里面右identify()函数调用,此函数用于检测pixhawk硬件是否是在等待刷机的状态。如果已经属于等待刷机的状态,则跳出AttemptRebootToBootloader()函数。如果不是,则通过命令发送重启并进入等待刷机状态的命令。针对comPort的操作大多是用于检测HeartBeat心跳包来确定硬件是否插在电脑上以及插到了哪个com口。还有代码块一些是用来更新进度条用的。
此段函数可简化为:

        private void AttemptRebootToBootloader(){try{up.identify();return;}catch (Exception ex){log.Error(ex);}MainV2.comPort.doReboot(true, false);MainV2.comPort.Close();}

doReboot()

MissionPlanner的固件下载模块相关推荐

  1. EC600 QuecPython开发环境搭建、固件下载,最方便的OpenCPU物联网4G通信解决方案

    EC600 QuecPython 官方资源汇总 开发环境搭建 1.安装windows驱动 2.验证模组的固件版本 3.烧录QuecPython固件 小试QuecPython 1.查看系统信息 2.点亮 ...

  2. 涂鸦三明治开发套件开箱及固件下载

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 人工智能编程入门博客 开箱 涂鸦三明治开发套件包括:涂鸦三明治红外遥控功能板.涂鸦三明治 Wi-Fi ...

  3. 怎么在手机上下载python模块_python下载模块然后怎么安装

    python下载模块然后怎么安装? 推荐:<Python教程> python 安装模块的方法 学习python肯定是要调用许多的模块,那面怎么安装呢! 黄博主目前也就掌握了两种方法,你们有 ...

  4. ADuC845串口下载模块制作

    ➤ 01串口下载线 ADuC845 是通过串口下载的.相关的下载过程可以参见 创界uVision下的ADuC845的工程文件 .最初的下载板是来自于2013年设计的下载板1.下图显示了该下载板的引线. ...

  5. 有始有终,设计一个结构合理的下载模块

    完成开发任务的同时,我们总希望自己能够交付高质量的代码.代码质量的测度有很多方法,可扩展性.可复用性是其中的两项指标.设计模式的理论能够非常有效地指导代码设计,但是光谈这些理论是非常抽象的,本文针对下 ...

  6. OpenMV(二)--IDE安装与固件下载

    IDE安装与固件下载 1. IDE安装 2. 固件下载 2.1 DFuSe安装 2.2 固件下载 1. IDE安装 OpenMV具有独有的IDE,而且可以跨平台使用,支持Win, Mac OS, Li ...

  7. android 新闻应用、Xposed模块、酷炫的加载动画、下载模块、九宫格控件等源码...

    Android精选源码 灵活的ShadowView,可替代CardView使用 基于Tesseract-OCR实现自动扫描识别手机号 Android播放界面仿QQ音乐开源音乐播放器 新闻应用项目采用了 ...

  8. python爬虫下载模块_python爬虫模块之HTML下载模块

    HTML下载模块 该模块主要是根据提供的url进行下载对应url的网页内容.使用模块requets-HTML,加入重试逻辑以及设定最大重试次数,同时限制访问时间,防止长时间未响应造成程序假死现象. 根 ...

  9. java固件包_iOS13 各版本固件下载地址以及更新方法

    2019-06-04 7907 iOS13本次更新: iOS13 developer beta①Face id 解锁速度增加30%②App打开速度快三倍③黑暗模式(dark mode)④Applemu ...

最新文章

  1. spring boot跨域问题
  2. Laravel经常使用的语法总结
  3. OAuth 2.0 Java指南:5分钟保护您的应用程序安全
  4. Google Maps 地址转化成坐标
  5. Git 提交错了不用慌,这三招帮你修改记录
  6. angular2之pdf文件操作大全
  7. 获取mssqlserver数据库表的字段名称,字段说明,数据类型,主键等表的信息
  8. jquery 事件冒泡的介绍
  9. 测试开发工程师面试题目
  10. UWP开发:APP之间的数据交互(以微信为例)
  11. AD如何修改PCB文件的黑色编辑区
  12. 教育教学微课题研究方案——实习调研论文
  13. C++实现改变网速*SpeedDuplex和网速监控
  14. 詹姆斯加入湖人,杜兰特会留在勇士吗?
  15. 外挂制作之思路总结和基址与偏移量
  16. SDUT OJ 2977
  17. 事物认识分析基本方法(转)
  18. 基于业务计划和收益的数据资产价值评估研究
  19. win7英文版很多软件中文显示乱码解决方案
  20. 操作系统(2)_硬件环境

热门文章

  1. Android中R文件ID值
  2. 爱康科技收购北京碳诺科技 加速公司碳排放战略布局
  3. 迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅
  4. 28.Android 十分方便的EasyRecyclerView
  5. 广东移动24日开始免除国内长途及漫游费
  6. 2.5D立体字体 html+css
  7. java amr格式转mp3格式(完美解决Linux下转换0K问题)
  8. 浅谈Web安全技术----RBI
  9. Windows 10 神州网信政府版 麦克风、摄像头的使用
  10. asp使用组件在线发邮件的多种方法