#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include "canthread.h"
#include <string.h>
#include <QTextEdit>
#include <QMessageBox>
#include <wchar.h>
#include <QAction>
#include "can_device.h"
/*
版本更新记录:
1.20200329版本更改bin文件路径自动保存到指令文本:config/download.cfg
2.自适应不同缩放比例下QT显示控件乱掉的问题
*/
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, canthread(new CANThread)
, ui(new Ui::MainWindow)
, m_settings(new SettingsDialog)
{
ui->setupUi(this);
dev_ops = canDeviceParam::getInstance();
ui->stackedWidget->setCurrentIndex(0);
/*默认文件写入与读出*/
QString path = QCoreApplication::applicationDirPath() + "/config/download.cfg";
QFile file(path);
dev_ops->demconfigpath = path;
//qDebug()<<"P:"<<dev_ops->demconfigpath;
if (file.open(QIODevice::ReadOnly | QIODevice::Text ))
{
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
if( line.startsWith(tr("Firmware=")))
dev_ops->fileUpdate = line.mid(9);
if(line.startsWith(tr("CanType=")))
{
QString QType = line.mid(8);
dev_ops->nDeviceType = QType.toInt();
}
if(line.startsWith(tr("CanChannel=")))
{
QString Qchannel = line.mid(11);
dev_ops->nCANInd = Qchannel.toInt();
dev_ops->nDeviceInd = 0;
}
m_settings->setdefaultCan(dev_ops->nDeviceType ,dev_ops->nCANInd);
}
}
else
{
QString dlgTitle="警告!";
QString str="no file named CONFIG.ini";
QMessageBox::critical(this, dlgTitle, str,QMessageBox::Ok);
}
ui->lineEdit->setText(dev_ops->fileUpdate);
file.close();
canthread = new CANThread(this);
canthread->radar_id = 0;
connect(canthread, &CANThread::TextPrintf, this, &MainWindow::Printf_slot);
connect(this, &MainWindow::setWaring, this, &MainWindow::printf_waring);
connect(ui->action_settings,&QAction::triggered, m_settings, &SettingsDialog::show);
}
MainWindow::~MainWindow()
{
delete ui;
delete canthread;
delete m_settings;
canthread->closeCAN();
}
void MainWindow::on_pushButton_clicked()
{
bool dev = canthread->openCAN();
if(dev == true)
{
dev_ops->isOpen = true;
canthread->start();
canthread->stopped = true;
ui->pushButton->setText("已打开");
ui->pushButton->setEnabled(false);
emit setWaring("打开设备成功!", Qt::green, 14);
}
else
{
dev_ops->isOpen = false;
if(dev_ops->nDeviceType == 4)
emit setWaring("打开CAN设备失败,当前设置为创芯CAN-II!", Qt::red, 14 , 1);
else if(dev_ops->nDeviceType == 21)
emit setWaring("打开CAN设备失败,当前设置为USB-CAN-2E-U!", Qt::red, 14 , 1);
else
emit setWaring("打开CAN设备失败!", Qt::red, 14 , 1);
}
}
void MainWindow::closeEvent()
{
qDebug()<<"closeEvent";
canthread->closeCAN();
}
//连接雷达
void MainWindow::on_connect_clicked()
{
BYTE SendBuf[8] = {0xff, 0x00,0x12, 0x34, 0x43, 0x21, 0x00, 0xff};
BYTE stopAll[8] = {0x02, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
BYTE stopLeft[8] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
BYTE stopRight[8] = {0x01 , 0x01 ,0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
bool bRet = false;
if(!dev_ops->isOpen)
{
emit setWaring("设备未打开!请先打开设备", Qt::red, 14 , 1);
return;
}
if(canthread->radar_id == 0)
bRet = canthread->writeCan(stopLeft);
else if(canthread->radar_id == 1)
bRet = canthread->writeCan(stopRight);
else{
bRet = canthread->writeCan(stopAll);
}
canthread->sleep(500);
bRet =canthread->writeCan(SendBuf);
if(bRet){
canthread->sleep(50);
int len = strncmp((const char *)&dev_ops->recvBuffer, (const char *)SendBuf , sizeof(SendBuf));
if(len == 0)
{
emit setWaring("雷达连接成功!", Qt::green, 14);
canthread->stopped = true;
dev_ops->isConnect = true;
ui->connect->setEnabled(false);
}
else
emit setWaring("连接失败!握手失败", Qt::red, 14);
}
else
{
emit setWaring("连接失败!握手失败", Qt::red, 14, 1);
}
ui->progressBar->setRange(0,100);
ui->progressBar->setValue(0);
}
void MainWindow::on_toolButton_clicked()
{
QString filter="bin文件(*combine.bin);;所有文件(*.*)"; //文件过滤器
QString file_name = QFileDialog::getOpenFileName(this, "打开文件路径...", "C:",filter);
if(file_name.isEmpty())
return;
QFile file(file_name);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
ui->lineEdit->setText("打开文件失败!");
}
ui->lineEdit->setText(""+file_name);
dev_ops->fileUpdate = file_name ;
QFile Ncfile(dev_ops->demconfigpath);
Ncfile.open(QIODevice::ReadOnly);
if(Ncfile.isOpen())
{
QString strtemp;
QTextStream NctextStream(&Ncfile);
QString name = "Firmware=";
QString Alltemp;
while(!NctextStream.atEnd())
{
strtemp = NctextStream.readLine();
if(strtemp.mid(0,9) == name)
{
Alltemp = Alltemp+ QString("Firmware=").toLatin1() + dev_ops->fileUpdate;
Alltemp += QString('\n').toLatin1();
}
else
{
Alltemp += strtemp.toLatin1();
Alltemp += QString('\n').toLatin1();
}
}
Ncfile.close();
Ncfile.open(QIODevice::WriteOnly);
QTextStream in(&Ncfile);
in <<Alltemp;
}
}
void MainWindow::on_download_button_clicked()
{
if(!dev_ops->isConnect){
emit setWaring("请先连接雷达板!", Qt::red, 14 , 1);
return;
}
ui->download_button->setEnabled(false);
/*开始下载bin文件*/
QString file_name = dev_ops->fileUpdate;
qDebug()<<file_name;
/*将QString类型转化为char* 类型*/
std::string str = file_name.toStdString();
//const char* ch = str.c_str();
/*Qstring转化为wchar_t*/
const wchar_t * encodedName = reinterpret_cast<const wchar_t *>(file_name.utf16());
FILE *fp;
fp = _wfopen(encodedName, L"rb");
if(fp == NULL){
emit setWaring("打开文件失败!", Qt::red, 14 , 1);
return;
}
/*打开设备成功*/
/*当前不支持打开中文路径的bin文件*/
int ext_flash_mem_addr = 0x30000;
int target_addr = 0x770000;
fseek(fp,0,SEEK_END); //将文件指针指向最后
int total_size = ftell(fp);
int ext_flash_mem_len = total_size;
byte erase_req_frame[16] = {0};
byte erase_req_resp[16] = {0};
erase_req_frame[0] = 0x31;
erase_req_frame[1] = 0x01;
erase_req_frame[2] = 0x00;
erase_req_frame[3] = 0x00;
erase_req_frame[4] = (byte)((ext_flash_mem_addr >> 24) & 0xFF);
erase_req_frame[5] = (byte)((ext_flash_mem_addr >> 16) & 0xFF);
erase_req_frame[6] = (byte)((ext_flash_mem_addr >> 8) & 0xFF);
erase_req_frame[7] = (byte)((ext_flash_mem_addr >> 0) & 0xFF);
erase_req_frame[8] = (byte)((ext_flash_mem_len >> 24) & 0xFF);
erase_req_frame[9] = (byte)((ext_flash_m
没有合适的资源?快使用搜索试试~ 我知道了~
QT界面可同时操作周立功CAN 2E-U和创芯科技CANalys-II设备
共220个文件
xml:64个
dll:57个
qm:22个
需积分: 9 10 下载量 66 浏览量
2022-09-02
21:35:24
上传
评论 2
收藏 48.9MB ZIP 举报
温馨提示
window64位系统 QT界面开发 ,模拟OTA升级指令
资源详情
资源评论
资源推荐
收起资源包目录
QT界面可同时操作周立功CAN 2E-U和创芯科技CANalys-II设备 (220个子文件)
CAN_OTA.pro.user.2dc5bed.22 43KB
CAN_OTA.pro.user.4.8-pre1 61KB
setting.ui.bak 358B
bootloader.bin 12KB
download.cfg 258B
qt.conf 46B
mainwindow.cpp 22KB
canthread.cpp 19KB
qrc_img.cpp 12KB
moc_mainwindow.cpp 9KB
form.cpp 7KB
moc_canthread.cpp 4KB
moc_setting.cpp 4KB
setting.cpp 3KB
qrc_Resources.cpp 3KB
recvThread.cpp 3KB
can_device.cpp 727B
main.cpp 298B
Makefile.Debug 101KB
object_script.CAN_OTA.Debug 218B
opengl32sw.dll 19.95MB
Qt5Gui.dll 6.22MB
Qt5Core.dll 6.1MB
Qt5Widgets.dll 5.4MB
D3Dcompiler_47.dll 3.98MB
libGLESV2.dll 3.8MB
qwindows.dll 1.75MB
libstdc++-6.dll 1.36MB
ZlgCloud.dll 571KB
ZlgCloud.dll 571KB
qwebp.dll 533KB
qtiff.dll 498KB
CANDTU_NET_400.dll 440KB
CANDTU_NET.dll 440KB
CANDTU_NET_400.dll 440KB
CANDTU_NET.dll 440KB
CANWIFI_TCP.dll 423KB
CANWIFI_TCP.dll 423KB
qjpeg.dll 384KB
Qt5Svg.dll 345KB
zlgcan.dll 307KB
zlgcan.dll 307KB
CANETE.dll 304KB
CANWIFI_UDP.dll 304KB
CANETE.dll 304KB
CANWIFI_UDP.dll 304KB
ControlCAN.dll 278KB
ControlCAN.dll 278KB
qwindowsvistastyle.dll 174KB
VirtualUSBCAN.dll 139KB
VirtualUSBCAN.dll 139KB
CANFDNET_TCP.dll 136KB
CANFDNET_TCP.dll 136KB
CANFDNET_UDP.dll 130KB
CANFDNET_UDP.dll 130KB
USBCANFD.dll 119KB
USBCANFD.dll 119KB
CANFDCOM.dll 96KB
CANFDCOM.dll 96KB
libgcc_s_seh-1.dll 73KB
libwinpthread-1.dll 51KB
qicns.dll 49KB
CANET_TCP.dll 48KB
CANET_TCP.dll 48KB
qsvgicon.dll 46KB
qgif.dll 40KB
qico.dll 39KB
USBCAN.dll 34KB
USBCAN.dll 34KB
qsvg.dll 33KB
CANDevice.dll 31KB
CANDevice.dll 31KB
qtga.dll 31KB
qwbmp.dll 31KB
CANDevCore.dll 30KB
CANDevCore.dll 30KB
libEGL.dll 27KB
CAN_OTA.exe 311KB
ui_mainwindow.h 22KB
moc_predefs.h 14KB
zlgcan.h 12KB
zlgcan.h 12KB
ui_setting.h 7KB
canframe.h 5KB
ui_form.h 5KB
config.h 3KB
ControlCAN.h 3KB
ControlCAN.h 3KB
canthread.h 2KB
mainwindow.h 1KB
can_database.h 1KB
can_device.h 753B
setting.h 689B
form.h 445B
typedef.h 273B
ui_dialog.h 67B
calterah.ico 200KB
dll_cfg.ini 1KB
dll_cfg.ini 1KB
candtu.ini 522B
共 220 条
- 1
- 2
- 3
东东东12138
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- element-icons
- vs图书管理系统框架 winform + c# + sqlserver + 界面美化
- 基于Springboot的学生成绩管理系统-Java项目-毕业设计
- 基于vue+springboot在线考试系统 框架 idea + vscode + html + css + vue + jav
- shell脚本监控docker容器和supervisor 运行情况
- 图书管理系统框架 winform + c# + sqlserver + 界面美化
- 基于react16.7.0 + antd3.11.6 + axios + 0.18.0的基础上搭建的路由框架.zip
- 3333333333333333333
- STM32软件I2C,已验证
- 使用python的turtle画玫瑰实例代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0