From 399a46b33d48c2a4ea1cd8b31f51f706ce87ffb8 Mon Sep 17 00:00:00 2001 From: xiaoming <2014500726@smail.xtu.edu.cn> Date: Fri, 8 Dec 2023 11:04:24 +0800 Subject: [PATCH] add download a10 fw code Signed-off-by: xiaoming <2014500726@smail.xtu.edu.cn> --- .github/workflows/linux.yml | 7 +-- .github/workflows/windows.yml | 82 ++--------------------------------- src/mainwindow.cpp | 66 ++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 81 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 669ef58b..88e6edcf 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -2,7 +2,7 @@ name: linux on: push: - branches: [ main ] + branches: [ main, download_a10_fw ] paths-ignore: - 'doc/**' - 'docs/**' @@ -67,10 +67,11 @@ jobs: sed -i 's/QT_DIR=\/opt\/Qt6.2.0\/6.2.0\/gcc_64/QT_DIR=$(cd "$(dirname "$0")";pwd)\/..\/Qt\/6.5.3\/gcc_64/g' build_deb.sh sed -i 's/LIBSSH2_DIR=\/libssh2/LIBSSH2_DIR=\/usr\/local\/output/g' ./lib/qtssh/qtssh.pri ./build_deb.sh + rm ./dpkg/*.deb - name: Upload build asserts uses: actions/upload-artifact@v3.1.3 with: - name: quardCRT_Ubuntu2004 + name: a10_fw_loader path: | - ./dpkg/*.deb + ./dpkg/quardCRT_Linux_*_x86_64 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3d5a6d4a..b7e55a1c 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -2,7 +2,7 @@ name: windows on: push: - branches: [ main ] + branches: [ main, download_a10_fw ] paths-ignore: - 'doc/**' - 'docs/**' @@ -94,86 +94,12 @@ jobs: ./tools/sed/sed.exe -i "s/WINPTY_DIR=D:\\quardCRT\\depend\\winpty/WINPTY_DIR=D:\\winpty/g" ./lib/ptyqt/ptyqt.pri ./tools/sed/sed.exe -i "s/LIBSSH2_DIR=\/libssh2/LIBSSH2_DIR=D:\\libssh2/g" ./lib/qtssh/qtssh.pri ./build_setup.bat + mv ./InnoSetup/build/quardCRT.exe ./InnoSetup/build/a10_fw_loader.exe - name: Upload build asserts uses: actions/upload-artifact@v3.1.3 with: - name: quardCRT_windows - path: | - ./InnoSetup/quardCRT_setup.exe - - - name: Run tests - run: | - ./InnoSetup/build/quardCRT.exe --version - - windows_msvc2019: - runs-on: windows-2022 - - steps: - - uses: actions/checkout@v4 - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - arch: 'win64_msvc2019_64' - version: '6.5.3' - modules: 'qt5compat qtwebsockets qtserialport qtmultimedia' - aqtversion: '==3.1.7' - - - name: Install cmake - uses: crazy-max/ghaction-chocolatey@v3 - with: - args: install cmake --no-progress - - - name: Install innosetup - uses: crazy-max/ghaction-chocolatey@v3 - with: - args: install innosetup --no-progress - - - name: Setup MSVC - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x64 - toolset: 14.29 - - - name: Install libssh2 - run: | - cd depend - ./build_libssh2_msvc.bat - mkdir D:\\libssh2 - mkdir D:\\libssh2\\include - mkdir D:\\libssh2\\lib - mkdir D:\\libssh2\\bin - cp -r ./output/include/* D:\\libssh2\\include/ - cp -r ./output/lib/* D:\\libssh2\\lib/ - cp -r ./output/bin/* D:\\libssh2\\bin/ - - - name: Install winpty - run: | - cd D:/ - curl -L https://github.com/rprichard/winpty/releases/download/0.4.3/winpty-0.4.3-msys2-2.7.0-x64.tar.gz -o winpty-0.4.3-msys2-2.7.0-x64.tar.gz - tar -xvf winpty-0.4.3-msys2-2.7.0-x64.tar.gz - mv winpty-0.4.3-msys2-2.7.0-x64 winpty - - - name: Build all - run: | - git fetch --tags --force - git describe --always --long --abbrev=10 --tags | ./tools/awk/awk.exe '{print \"\\\"\"$0\"\\\"\"}' > git_tag.inc - ./tools/sed/sed.exe -i "s/git_tag.inc/git_tag.ci.inc/g" quardCRT.pro - ./tools/sed/sed.exe -i "s/QT_DIR=C:\/Qt\/Qt6.2.0\/6.2.0\/msvc64\/bin/QT_DIR=%Qt6_DIR%/g" ./build_setup_msvc.bat - ./tools/sed/sed.exe -i "s/QT_TOOLS_DIR=C:\/Qt\/Qt6.2.0\/Tools\/msvc64\/bin/QT_TOOLS_DIR=C:\/ProgramData\/Chocolatey\/lib\/mingw\/tools\/install\/msvc64\/bin/g" ./build_setup_msvc.bat - ./tools/sed/sed.exe -i "s/WINPTY_DIR=D:\\quardCRT\\depend\\winpty/WINPTY_DIR=D:\\winpty/g" ./lib/ptyqt/ptyqt.pri - ./tools/sed/sed.exe -i "s/LIBSSH2_DIR=\/libssh2/LIBSSH2_DIR=D:\\libssh2/g" ./lib/qtssh/qtssh.pri - ./build_setup_msvc.bat - cp ./InnoSetup/quardCRT_setup.exe ./InnoSetup/quardCRT_setup_msvc.exe - - - name: Upload build asserts - uses: actions/upload-artifact@v3.1.3 - with: - name: quardCRT_windows_msvc2019 + name: a10_fw_loader path: | - ./InnoSetup/quardCRT_setup_msvc.exe + ./InnoSetup/build - - name: Run tests - run: | - ./InnoSetup/build/quardCRT.exe --version diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index bf2649af..2dd98da6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -63,6 +63,9 @@ #include "ui_mainwindow.h" +#include +#include + CentralWidget::CentralWidget(QString dir, StartupUIMode mode, QLocale lang, bool isDark, QWidget *parent) : QMainWindow(parent) , ui(new Ui::CentralWidget) @@ -626,6 +629,69 @@ CentralWidget::CentralWidget(QString dir, StartupUIMode mode, QLocale lang, bool publickeyManagerAction->setEnabled(false); tileAction->setEnabled(false); cascadeAction->setEnabled(false); + + // 此处代码为下载A10固件工具专用定制代码 + QStringList ipaddrList; + QList list = QNetworkInterface::allAddresses(); + foreach(QHostAddress address,list) { + if(address.protocol() == QAbstractSocket::IPv4Protocol) { + if(address.toString() == "127.0.0.1") { + continue; + } + ipaddrList.append(address.toString()); + } + } + bool isOK = false; + QString severip = QInputDialog::getItem(this,"选择IP地址","选择连接相机网卡的IP地址",ipaddrList,0,false,&isOK); + if(!isOK || severip.isEmpty()) { + QMessageBox::critical(this, "错误", "未选择IP地址"); + exit(0); + } + QString boardip; + do { + boardip = severip.left(severip.lastIndexOf(".")+1)+QString::number(QRandomGenerator::global()->bounded(50,200)); + }while(boardip == severip); + + QString fwDir = FileDialog::getExistingDirectory(this, "选择固件路径", QDir::homePath()); + if(fwDir.isEmpty()) { + QMessageBox::critical(this, "错误", "未选择固件路径"); + exit(0); + } + + QTftp *a10fwTftpServer = new QTftp; + int port = 20000+QRandomGenerator::global()->bounded(1000); + a10fwTftpServer->setPort(port); + a10fwTftpServer->setUpDir(fwDir); + a10fwTftpServer->setDownDir(fwDir); + a10fwTftpServer->startServer(); + if(mode != MINIUI_MODE) { + if(!mainWindow) menuBarAction->trigger(); + toolBarAction->trigger(); + statusBarAction->trigger(); + sideWindowAction->trigger(); + } + splitter->setSizes(QList() << 1 << 1); + splitter->setCollapsible(0,false); + splitter->setCollapsible(1,false); + mainWidgetGroupList[0]->splitter->setCollapsible(0,false); + mainWidgetGroupList[0]->splitter->setCollapsible(1,false); + mainWidgetGroupList[1]->splitter->setCollapsible(0,false); + mainWidgetGroupList[1]->splitter->setCollapsible(1,false); + mainWidgetGroupList[1]->splitter->setSizes(QList() << 10000 << 1); + mainWidgetGroupList[0]->splitter->setSizes(QList() << 10000 << 1); +#if defined(Q_OS_WIN) + mainWidgetGroupList[0]->commandWidget->setCmd("./down_uboot_use_jtag.ps1\n"); +#else + mainWidgetGroupList[0]->commandWidget->setCmd("./down_uboot_use_jtag.sh\n"); +#endif + mainWidgetGroupList[1]->commandWidget->setCmd("setenv ipaddr "+boardip+";setenv serverip "+severip+";setenv tftpdstp " + QString::number(port) + ";run percipioload;boot;\n"); + resize(1200,600); + setWindowTitle("A10固件下载工具"); + startLocalShellSession(mainWidgetGroupList[0],QString(),fwDir); + quickConnectMainWidgetGroup = mainWidgetGroupList[1]; + quickConnectWindow->setProtocol(QuickConnectWindow::Serial); + quickConnectWindow->setSaveSession(false); + quickConnectWindow->show(); } CentralWidget::~CentralWidget() {