Skip to content

Commit

Permalink
Полностью переделаны процедуры сохранения прошивки.
Browse files Browse the repository at this point in the history
Параметры файла вынесены на главную панель
  • Loading branch information
forth32 committed Apr 28, 2018
1 parent 11d9d04 commit 952ea37
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 110 deletions.
27 changes: 24 additions & 3 deletions MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ extern QComboBox* pselector;
//************************************************
MainWindow::MainWindow(QString startfile): QMainWindow() {

int i;

this->resize(1000, 737);

// Класс для загрузки конфигов
Expand Down Expand Up @@ -45,6 +47,26 @@ centralwidget->addWidget(hdrpanel);
centralwidget->setStretchFactor(0,1);
vlhdr=new QVBoxLayout(hdrpanel);

// параметры прошивки
hdlbl3=new QLabel("Параметры файла");
hdlbl3->setFont(font);
vlhdr->addWidget(hdlbl3);

QFormLayout* lfparm=new QFormLayout(0);
vlhdr->addLayout(lfparm);

// тип файла прошивки
dload_id_selector=new QComboBox(centralwidget);
lfparm->addRow("Тип файла",dload_id_selector);
// флаг сжатия
zflag_selector=new QCheckBox("zlib-cжатие разделов",centralwidget);
vlhdr->addWidget(zflag_selector);
// наполняем список кодов прошивки
for(i=0;i<8;i++) {
dload_id_selector->insertItem(i,fw_description(i));
}
dload_id_selector->setCurrentIndex(0);

// Список разделов
hdlbl1=new QLabel("Список разделов",hdrpanel);
hdlbl1->setFont(font);
Expand Down Expand Up @@ -89,8 +111,7 @@ setdate = new QToolButton(hdrpanel);
setdate->setText("Установить текущую дату");
vlhdr->addWidget(setdate);

hdlbl3=new QLabel("Версия прошивки",hdrpanel);
vlhdr->addWidget(hdlbl3);
vlhdr->addWidget(new QLabel("Версия прошивки",hdrpanel));

QSize qs=Time_input->sizeHint();
qs.rwidth() *=2;
Expand Down Expand Up @@ -178,7 +199,7 @@ filesave->setEnabled(false);
filesave->setShortcut(QKeySequence::Save);
menu_file->addAction(filesave);

menu_file->addAction("Сохранить как...",this,SLOT(save_as));
menu_file->addAction("Сохранить как...",this,SLOT(save_as()));
menu_file->addSeparator();

// Последние открытые файлы
Expand Down
2 changes: 2 additions & 0 deletions MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ QFormLayout* lphdr; // редакторы полей заголовка
QLineEdit *Date_input;
QLineEdit *Time_input;
QToolButton *setdate;
QComboBox* dload_id_selector;
QCheckBox* zflag_selector;
QLineEdit *Version_input;
QLineEdit *pcode;
QLabel* hdlbl3;
Expand Down
92 changes: 11 additions & 81 deletions fwsave.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,101 +13,32 @@
#include "signver.h"

extern QString fwfilename;
QLineEdit* filename;


//***************************************
//* Выбор имени файла
//***************************************
void fsdialog::browse() {

QString fn=fwfilename;

fn=QFileDialog::getSaveFileName(this,"Имя файла",fn,"firmware (*.fw);;All files (*.*)");
if (fn.isEmpty()) return;

filename->setText(fn);
}

//***************************************
//* Слот exec()
//***************************************
int fsdialog::exec() {

// return QDialog::Accepted;
return QDialog::exec();
}

//****************************************************************
//* Процедура сохранения образа прошивки в новом файле
//****************************************************************
void fw_saver(int mode) {
void fw_saver(bool newname, bool zflag) {

uint32_t i,res;
int32_t i;
FILE* out;
uint8_t hdr[92];
uint8_t zflag=0;
uint32_t percent;
char fname[200];
int dlcode;

QString deffilename=fwfilename;
if ((mode == 1) || fwfilename.isEmpty()) {
// Сохранение под новым имененм
QDialog* fsd=new fsdialog;
QGridLayout* lm = new QGridLayout(fsd);

QLabel* label_3 = new QLabel("Имя файла:",fsd);
lm->addWidget(label_3, 0, 0, 1, 1);

filename = new QLineEdit(fsd);
filename->setText(deffilename);
// filename->setReadOnly(true);
lm->addWidget(filename, 0, 1, 1, 2);
if (newname || fwfilename.isEmpty()) {
// выбираем новое имя файла
QString fn=fwfilename;

QToolButton* fselector = new QToolButton(fsd);
fselector->setIcon(QIcon(QApplication::style()->standardIcon(QStyle::SP_DirIcon)));
// fselector->setText("...");
lm->addWidget(fselector, 0, 3, 1, 1);

QCheckBox* compressflag = new QCheckBox("Сжать образы разделов",fsd);
lm->addWidget(compressflag, 2, 0, 1, 3);

QDialogButtonBox* buttonBox = new QDialogButtonBox(fsd);
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
lm->addWidget(buttonBox, 3, 0, 1, 3);

QComboBox* fcode = new QComboBox(fsd);
lm->addWidget(fcode, 1, 1, 1, 3);
// формируем список типов прошивок
for(i=0;i<8;i++) {
fcode->insertItem(i,fw_description(i));
}
fcode->setCurrentIndex(dload_id&7);

QLabel* label = new QLabel("Код файла прошивки:",fsd);
lm->addWidget(label, 1, 0, 1, 1);


QObject::connect(buttonBox, SIGNAL(accepted()), fsd, SLOT(accept()));
QObject::connect(buttonBox, SIGNAL(rejected()), fsd, SLOT(reject()));
QObject::connect(fselector, SIGNAL(clicked()), fsd, SLOT(browse()));
fn=QFileDialog::getSaveFileName(0,"Имя файла",fn,"firmware (*.fw);;All files (*.*)");
if (fn.isEmpty()) return;
fwfilename=fn;
}

res=fsd->exec();
strcpy(fname,fwfilename.toLocal8Bit().data());

if (compressflag->isChecked()) zflag=1;
strcpy(fname,filename->displayText().toLocal8Bit());
dlcode=fcode->currentIndex();
delete fsd;
dlcode=dload_id&7;

if (res != QDialog::Accepted) return;
}
// Сохранение под тем же имененм
else {
strcpy(fname,deffilename.toLocal8Bit().data());
dlcode=dload_id&7;
}
out=fopen(fname,"w");
if (out == 0) {
QMessageBox::critical(0,"Ошибка","Ошибка создания файла");
Expand Down Expand Up @@ -140,7 +71,6 @@ plm->addWidget(fbar);
pb->show();

// записываем образы всех разделов

for(i=0;i<ptable->index();i++) {
ptable->save_part(i,out,zflag);
percent=(i+1)*100/(ptable->index());
Expand Down
14 changes: 1 addition & 13 deletions fwsave.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,5 @@

extern ptable_list* ptable;

//****************************************************************
//* Класс диалогового окна
//****************************************************************
class fsdialog: public QDialog {
Q_OBJECT
public:
fsdialog(): QDialog(0){};

public slots:
void browse();
int exec();
};

void fw_saver(int);
void fw_saver(bool,bool);
27 changes: 16 additions & 11 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,11 @@ if (fwfilename.isEmpty()) {
title.append(filename);
setWindowTitle(title);
}

// устанавливаем правильный тип прошивки в селекторе типов
dload_id_selector->setCurrentIndex(dload_id&7);
// флаг сжатия
if(ptable->zsize(0)) zflag_selector->setChecked(true);

}

//*****************************************
Expand Down Expand Up @@ -167,6 +171,7 @@ if (fname.isEmpty()) return;
OpenFwFile(fname);

EnableMenu();

}


Expand All @@ -189,14 +194,14 @@ if ((dload_id&8) != 0) Menu_Oper_signinfo->setEnabled(1);
//******************************************************************
void MainWindow::save_as() {

fw_saver(1);
// удаляем звездочку из заголовка
QString str=windowTitle();
int pos=str.indexOf('*');
if (pos != -1) {
str.truncate(pos-1);
setWindowTitle(str);
}
fw_saver(true,zflag_selector->isChecked());
// новое имя файла в заголовке
settitle();
QString title=windowTitle();
title.append(" - ");
title.append(fwfilename);
setWindowTitle(title);

modified=false;
}

Expand All @@ -206,7 +211,7 @@ modified=false;
void MainWindow::SaveFwFile() {


fw_saver(0);
fw_saver(false,zflag_selector->isChecked());
// удаляем звездочку из заголовка
QString str=windowTitle();
int pos=str.indexOf('*');
Expand All @@ -231,7 +236,7 @@ if (modified) {
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard);
msgBox.setDefaultButton(QMessageBox::Save);
int reply = msgBox.exec();
if (reply == QMessageBox::Save) fw_saver(0);
if (reply == QMessageBox::Save) fw_saver(false,zflag_selector->isChecked());
}
modified=false;
}
Expand Down
2 changes: 1 addition & 1 deletion ptable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ set_modified();
//*******************************************************
//* Запись полного образа раздела в файл
//*******************************************************
void ptable_list::save_part(int np,FILE* out,uint8_t zflag) {
void ptable_list::save_part(int np,FILE* out,bool zflag) {

uint32_t pos,i,cnt;
uint8_t pad=0;
Expand Down
4 changes: 3 additions & 1 deletion ptable.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ class ptable_list {
uint8_t* iptr(int n) { return table[n].pimage; }
// получение типа раздела
enum parttypes ptype(int n) { return table[n].ptype; }
// получаение сжатого размера
uint32_t zsize(int n) { return table[n].zflag; }

// получение ссылок на описательные поля заголовка
uint8_t* platform(int n) { return table[n].hd.unlock; }
Expand All @@ -83,7 +85,7 @@ class ptable_list {

void findparts(FILE* in);
void loadimage(int np, FILE* in);
void save_part(int n,FILE* out, uint8_t zflag);
void save_part(int n,FILE* out, bool zflag);
void calc_crc16(int n);
void calc_hd_crc16(int n);

Expand Down

0 comments on commit 952ea37

Please sign in to comment.