-
Notifications
You must be signed in to change notification settings - Fork 44
/
headcopy.cpp
98 lines (79 loc) · 2.81 KB
/
headcopy.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//
// Копирование заголовков разделов
//
#include <QtWidgets>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include "ptable.h"
//**************************************************
//* Копирование заголовка раздела в другой раздел
//**************************************************
void head_copy() {
uint32_t i,res;
char str[100];
int src,dst;
QDialog* qd=new QDialog;
QGridLayout* lm=new QGridLayout(qd);
QFont font;
font.setPointSize(14);
font.setBold(true);
font.setWeight(75);
QLabel* label1 = new QLabel("Источник",qd);
label1->setFont(font);
lm->addWidget(label1,0,0);
QLabel* label2 = new QLabel("Приемник",qd);
label2->setFont(font);
lm->addWidget(label2,0,1);
QComboBox* from=new QComboBox(qd);
lm->addWidget(from,1,0);
QComboBox* to=new QComboBox(qd);
lm->addWidget(to,1,1);
QDialogButtonBox* buttonBox = new QDialogButtonBox(qd);
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
lm->addWidget(buttonBox,2,1);
QObject::connect(buttonBox, SIGNAL(accepted()), qd, SLOT(accept()));
QObject::connect(buttonBox, SIGNAL(rejected()), qd, SLOT(reject()));
// формируем список источников копирования
for(i=0;i<ptable->index();i++) {
sprintf(str,"%02i %s",i,ptable->name(i));
from->insertItem(i,str);
}
// формируем список приемников копирования
to->insertItem(0,"все разделы");
for(i=0;i<ptable->index();i++) {
sprintf(str,"%02i %s",i,ptable->name(i));
to->insertItem(i+1,str);
}
from->setCurrentIndex(0);
to->setCurrentIndex(0);
res=qd->exec();
src=from->currentIndex();
dst=to->currentIndex()-1;
delete qd;
if (res != QDialog::Accepted) return;
// оператор подтвердил выполнение
// структура описания заголовка раздела
struct __attribute__ ((__packed__)) pheader {
uint32_t magic; // 0xa55aaa55
uint32_t hdsize; // размер заголовка
uint32_t hdversion; // вресия заголовка
uint8_t unlock[8]; // платформа
uint32_t code; // тип раздела
uint32_t psize; // разме поля данных
uint8_t date[16];
uint8_t time[16]; // дата-время сборки прошивки
uint8_t version[32]; // версия пршоивки
uint16_t crc; // CRC заголовка
uint32_t blocksize; // размер блока CRC образа прошивки
};
for(i=0;i<ptable->index();i++) {
if ((i == dst) || (dst == -1)) {
memcpy(ptable->hptr(i)->date,ptable->hptr(src)->date,16);
memcpy(ptable->hptr(i)->time,ptable->hptr(src)->time,16);
memcpy(ptable->hptr(i)->version,ptable->hptr(src)->version,32);
}
}
}