通用固件等多设备多固件下载烧录工具设计 MFC工程转为console应用 支持平台高通QualComm MTK 展锐 移远 兆讯1902,1902T,1903 美信max32555等

文章描述了一个设计用于多设备、多固件下载烧录的工具,目标是节省成本并提高效率。该工具通过统一接口封装各厂家应用,支持自动识别串口和设备,并能同时处理多台设备的下载进程。此外,文章还讨论了如何将MFC工程转换为命令行应用以及C#程序在不同模式下的应用切换。

0 通用固件等多设备多固件下载烧录工具设计

 目的:一个设备里有多个芯片,每个芯片为不同平台。为了节约成本,把所有固件放在一个工位一个工具中下载。一个工具可以同时下载多台设备。

1.获取各应用源码接口文档、下载方法、测试固件等
2.把各厂家接口统一封装为console应用,统一接口。
3.通过管道连接所有应用。把串口和路径传给各应用,从控制台获取进度与结果。
4.自动识别串口,vid,pid,mi确定唯一串口,确定ap型号。插入一个显示一个进度。控制台输出的一行,进度++,达到90时进度回到20,只是让进度动起来。支持任意台设备数量,也能独立下载任意固件。
5.下载完成,显示失败或成功。再点下载,下载完成的都重新开始。

使用方法:
1.按目录放好。
2.配置config.ini 中的串口(也能配置为自动串口),路径也可以在界面设置。
3.运行WpfDownloadTool.exe
4.点下载
5.SP上电 AP上电
6.看结果。

7.再回到4,循环烧录下一台设备。

 

 

1 MFC工程转为console应用

先看效果:CMD带参数运行效果 ,参数为串口号 

 双击打开效果,不带参数。后面不带黑窗口也能运行,命令行一样有效。

MFC改为命令行交互,双击打开为MFC应用,命令行打开为console应用。 

  • 使用if (strlen(AfxGetApp()->m_lpCmdLine) > 0) //console mode来区分带不带参数
  • 工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入要添加的参数,各参数间用空格分离。
  • 同样是换行用        cout << pMsg->content.state << endl;就能触发outputdatareceived事件printf("%s\r\n", temp);就是不行。

示例源码:

#include <iostream>
using namespace std;
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
	cout << "ISPGuiApp Start m_lpCmdLine :" << AfxGetApp()->m_lpCmdLine << endl;//输入参数
	//可以直接把这当作console里的main
	//if (strlen(AfxGetApp()->m_lpCmdLine) > 0) //console mode
	//{
	//	CISPGuiDlg* sd;
	//	m_pMainWnd = sd = new CISPGuiDlg();
	//	INT_PTR nResponse = sd->Create(IDD_EMHDETECT_DIALOG); //创建一个非模态对话框,父窗口时主窗口
	//	sd->ShowWindow(SW_HIDE); //显示非模态对话框

	//	WINDOWPLACEMENT   wp;
	//	wp.length = sizeof(WINDOWPLACEMENT);
	//	wp.flags = WPF_RESTORETOMAXIMIZED;
	//	wp.showCmd = SW_HIDE;
	//	sd->SetWindowPlacement(&wp); //完全隐藏
	//  //这里得有死循环 并监听 非模态对话框退出就退出应用
	//}
	//else
	{
		CISPGuiDlg dlg;
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal(); //模态对话框  在OnInitDialog()中  ShowWindow(SW_MINIMIZE);		// 默认最小化
		cout <<"ISPGuiApp Exit:" <<nResponse << endl;
	}


 2 C#改为console应用     

  • 在项目上点右键->属性->应用程序选项卡->输出类型->控制台应用程序。 (不用改这点更好,双击时启动Windows Form应用,有参数时启动console模式)
  • 在设计之初应考虑将显示的代码与其它代码(例如功能、业务逻辑等)相分离。放在不同的程序集中。
  • 改变Main函数,加上参数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length == 0)
            { 
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {
                Console.WriteLine(args[0]);
                Thread.Sleep(1000);
                Console.WriteLine("Hello2");
                Thread.Sleep(1000);
                Console.WriteLine("success");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值