##// END OF EJS Templates
Sync
Jeandet Alexis -
r57:d1a982ae47e5 default
parent child
Show More
@@ -0,0 +1,62
1 #include "genericbinaryfilewidget.h"
2 #include "ui_genericbinaryfilewidget.h"
3 #include <QFileDialog>
4 #include <QFile>
5 #include "srec/srecfile.h"
6
7 genericBinaryFileWidget::genericBinaryFileWidget(QWidget *parent) :
8 QWidget(parent),
9 ui(new Ui::genericBinaryFileWidget)
10 {
11 ui->setupUi(this);
12 }
13
14 genericBinaryFileWidget::~genericBinaryFileWidget()
15 {
16 delete ui;
17 }
18
19 void genericBinaryFileWidget::openFile()
20 {
21 QStringList filesNames = QFileDialog::getOpenFileNames(
22 this,
23 "Select one or more files to open",
24 NULL,
25 "Binary Files (*.bin);;SREC Files (*.srec);;Elf Files (*)");
26
27 for(int i=0;i<filesNames.count();i++)
28 {
29 QFile file(filesNames.at(i));
30 if(file.open(QIODevice::ReadOnly))
31 {
32 char magic[4];
33 file.read(magic,4);
34 QString line;
35 switch((int)magic[0])
36 {
37 case 'e':
38 if((magic[1]=='l') && (magic[2]=='f'))
39 {
40 files.append(new FileListElement(filesNames.at(i),false,Type_Elf,NULL));
41 }
42 break;
43 case 'S':
44 file.seek(0);
45 line = file.readLine();
46 if(srecFile::checkSum(line))
47 {
48 files.append(new FileListElement(filesNames.at(i),false,Type_SREC,NULL));
49 }
50 break;
51 default:
52 files.append(new FileListElement(filesNames.at(i),false,Type_Bin,NULL));
53 break;
54 }
55 }
56 }
57
58 }
59
60
61
62
@@ -0,0 +1,42
1 #ifndef GENERICBINARYFILEWIDGET_H
2 #define GENERICBINARYFILEWIDGET_H
3
4 #include <QWidget>
5 #include <QString>
6 #include <QStringList>
7 #include <abstractbinfile.h>
8
9 namespace Ui {
10 class genericBinaryFileWidget;
11 }
12
13 typedef enum {Type_SREC,Type_Bin,Type_Elf}FileTypeEnum;
14 class FileListElement
15 {
16 public:
17 FileListElement() {}
18 FileListElement(QString fileName,bool isOpened,FileTypeEnum FileType,abstractBinFileWidget* viewer)
19 :fileName(fileName),isOpened(isOpened),FileType(FileType),viewer(viewer){}
20 QString fileName;
21 bool isOpened;
22 FileTypeEnum FileType;
23 abstractBinFileWidget* viewer;
24 };
25
26 class genericBinaryFileWidget : public QWidget
27 {
28 Q_OBJECT
29
30 public:
31 explicit genericBinaryFileWidget(QWidget *parent = 0);
32 ~genericBinaryFileWidget();
33
34 public slots:
35 void openFile();
36
37 private:
38 Ui::genericBinaryFileWidget *ui;
39 QList<FileListElement*> files;
40 };
41
42 #endif // GENERICBINARYFILEWIDGET_H
@@ -0,0 +1,103
1 <?xml version="1.0" encoding="UTF-8"?>
2 <ui version="4.0">
3 <class>genericBinaryFileWidget</class>
4 <widget class="QWidget" name="genericBinaryFileWidget">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>878</width>
10 <height>360</height>
11 </rect>
12 </property>
13 <property name="acceptDrops">
14 <bool>false</bool>
15 </property>
16 <property name="windowTitle">
17 <string>Form</string>
18 </property>
19 <layout class="QGridLayout" name="gridLayout_2">
20 <item row="0" column="0">
21 <widget class="QSplitter" name="splitter">
22 <property name="orientation">
23 <enum>Qt::Horizontal</enum>
24 </property>
25 <widget class="QWidget" name="widget" native="true">
26 <layout class="QGridLayout" name="gridLayout">
27 <item row="1" column="0">
28 <widget class="QPushButton" name="openFileQpb">
29 <property name="text">
30 <string/>
31 </property>
32 <property name="icon">
33 <iconset resource="../SocExplorerCommon.qrc">
34 <normaloff>:/images/add.svg</normaloff>:/images/add.svg</iconset>
35 </property>
36 <property name="iconSize">
37 <size>
38 <width>32</width>
39 <height>32</height>
40 </size>
41 </property>
42 </widget>
43 </item>
44 <item row="1" column="1">
45 <widget class="QPushButton" name="removeFileQpb">
46 <property name="text">
47 <string/>
48 </property>
49 <property name="icon">
50 <iconset resource="../SocExplorerCommon.qrc">
51 <normaloff>:/images/trash.svg</normaloff>:/images/trash.svg</iconset>
52 </property>
53 <property name="iconSize">
54 <size>
55 <width>32</width>
56 <height>32</height>
57 </size>
58 </property>
59 </widget>
60 </item>
61 <item row="1" column="2">
62 <spacer name="horizontalSpacer">
63 <property name="orientation">
64 <enum>Qt::Horizontal</enum>
65 </property>
66 <property name="sizeHint" stdset="0">
67 <size>
68 <width>40</width>
69 <height>20</height>
70 </size>
71 </property>
72 </spacer>
73 </item>
74 <item row="0" column="0" colspan="3">
75 <widget class="QTableWidget" name="tableWidget">
76 <column>
77 <property name="text">
78 <string>File</string>
79 </property>
80 </column>
81 <column>
82 <property name="text">
83 <string>Type</string>
84 </property>
85 </column>
86 </widget>
87 </item>
88 </layout>
89 </widget>
90 <widget class="QTabWidget" name="fileViewerTab">
91 <property name="currentIndex">
92 <number>-1</number>
93 </property>
94 </widget>
95 </widget>
96 </item>
97 </layout>
98 </widget>
99 <resources>
100 <include location="../SocExplorerCommon.qrc"/>
101 </resources>
102 <connections/>
103 </ui>
@@ -5,13 +5,13
5 #include "qhexedit/qhexedit.h"
5 #include "qhexedit/qhexedit.h"
6 #include "SocExplorerPlot.h"
6 #include "SocExplorerPlot.h"
7 #include "tcp_terminal_client.h"
7 #include "tcp_terminal_client.h"
8 #include "elf/elfparser.h"
9 #include "abstractbinfile.h"
10 #include "elf/elffile.h"
11 #include "elf/elffilewidget.h"
12 #include "elf/elfinfowdgt.h"
13 #include "QCustomPlot/qcustomplot.h"
8 #include "QCustomPlot/qcustomplot.h"
14 #include "srec/srecfile.h"
9 #include "genericBinaryFiles/abstractbinfile.h"
15 #include "srec/srecfilewidget.h"
10 #include "genericBinaryFiles/elf/elfparser.h"
16 #include "BinFile/binaryfile.h"
11 #include "genericBinaryFiles/elf/elffile.h"
17 #include "BinFile/binaryfilewidget.h"
12 #include "genericBinaryFiles/elf/elffilewidget.h"
13 #include "genericBinaryFiles/elf/elfinfowdgt.h"
14 #include "genericBinaryFiles/srec/srecfile.h"
15 #include "genericBinaryFiles/srec/srecfilewidget.h"
16 #include "genericBinaryFiles/BinFile/binaryfile.h"
17 #include "genericBinaryFiles/BinFile/binaryfilewidget.h"
@@ -96,7 +96,8 HEADERS += \
96 genericBinaryFiles/srec/srecfilewidget.h \
96 genericBinaryFiles/srec/srecfilewidget.h \
97 genericBinaryFiles/abstractbinfile.h \
97 genericBinaryFiles/abstractbinfile.h \
98 genericBinaryFiles/BinFile/binaryfile.h \
98 genericBinaryFiles/BinFile/binaryfile.h \
99 genericBinaryFiles/BinFile/binaryfilewidget.h
99 genericBinaryFiles/BinFile/binaryfilewidget.h \
100 genericBinaryFiles/genericbinaryfilewidget.h
100
101
101
102
102 SOURCES += \
103 SOURCES += \
@@ -120,12 +121,14 SOURCES += \
120 genericBinaryFiles/srec/srecfilewidget.cpp \
121 genericBinaryFiles/srec/srecfilewidget.cpp \
121 genericBinaryFiles/abstractbinfile.cpp \
122 genericBinaryFiles/abstractbinfile.cpp \
122 genericBinaryFiles/BinFile/binaryfile.cpp \
123 genericBinaryFiles/BinFile/binaryfile.cpp \
123 genericBinaryFiles/BinFile/binaryfilewidget.cpp
124 genericBinaryFiles/BinFile/binaryfilewidget.cpp \
125 genericBinaryFiles/genericbinaryfilewidget.cpp
124
126
125 FORMS += \
127 FORMS += \
126 genericBinaryFiles/elf/elffilewidget.ui \
128 genericBinaryFiles/elf/elffilewidget.ui \
127 genericBinaryFiles/srec/srecfilewidget.ui \
129 genericBinaryFiles/srec/srecfilewidget.ui \
128 genericBinaryFiles/BinFile/binaryfilewidget.ui
130 genericBinaryFiles/BinFile/binaryfilewidget.ui \
131 genericBinaryFiles/genericbinaryfilewidget.ui
129
132
130 OTHER_FILES += \
133 OTHER_FILES += \
131 ./pythongenerator.sh \
134 ./pythongenerator.sh \
@@ -133,3 +136,5 OTHER_FILES += \
133
136
134
137
135
138
139
140
@@ -25,15 +25,18
25
25
26 srecFile::srecFile()
26 srecFile::srecFile()
27 {
27 {
28 p_mergingRecords = true;
28 }
29 }
29
30
30 srecFile::srecFile(const QString &File)
31 srecFile::srecFile(const QString &File)
31 {
32 {
33 p_mergingRecords = true;
32 openFile(File);
34 openFile(File);
33 }
35 }
34
36
35 srecFile::srecFile(const QStringList &Files)
37 srecFile::srecFile(const QStringList &Files)
36 {
38 {
39 p_mergingRecords = true;
37 openFiles(Files);
40 openFiles(Files);
38 }
41 }
39
42
@@ -101,9 +104,9 bool srecFile::toSrec(QList<codeFragment
101 for(int i=0;i<fragments.count();i++)
104 for(int i=0;i<fragments.count();i++)
102 {
105 {
103 codeFragment *fragment = fragments.at(i);
106 codeFragment *fragment = fragments.at(i);
104 for(int j=0;j<((int)(fragment->size));j+=16)
107 for(int j=0;j<((int)(fragment->size)/16);j++)
105 {
108 {
106 stream << buildRecord(3,fragment->address+j,fragment->data+j,16);
109 stream << buildRecord(3,fragment->address+(j*16),fragment->data+(j*16),16);
107 }
110 }
108 int rem = fragment->size % 16;
111 int rem = fragment->size % 16;
109 if(rem)
112 if(rem)
@@ -186,6 +189,16 bool srecFile::getFragmentData(int index
186 return false;
189 return false;
187 }
190 }
188
191
192 bool srecFile::mergingRecords()
193 {
194 return p_mergingRecords;
195 }
196
197 void srecFile::setMergingRecords(bool enabled)
198 {
199 p_mergingRecords = enabled;
200 }
201
189 bool srecFile::isSREC()
202 bool srecFile::isSREC()
190 {
203 {
191 return p_isSrec & isopened();
204 return p_isSrec & isopened();
@@ -205,6 +218,7 bool srecFile::isSREC(const QString &Fil
205 return false;
218 return false;
206 }
219 }
207
220
221
208 void srecFile::parseFile(QFile *file)
222 void srecFile::parseFile(QFile *file)
209 {
223 {
210 if(file->isOpen())
224 if(file->isOpen())
@@ -212,6 +226,7 void srecFile::parseFile(QFile *file)
212 this->p_lineCount = 0;
226 this->p_lineCount = 0;
213 file->seek(0);
227 file->seek(0);
214 codeFragment* fragment=NULL;
228 codeFragment* fragment=NULL;
229 bool newFragment=true;
215 char* data;
230 char* data;
216 quint64 size=0;
231 quint64 size=0;
217 quint64 address=-1;
232 quint64 address=-1;
@@ -233,40 +248,55 void srecFile::parseFile(QFile *file)
233 {
248 {
234 if((rectype>=1) && (rectype<=3))
249 if((rectype>=1) && (rectype<=3))
235 {
250 {
236 bool merged = false;
251 if(p_mergingRecords)
237 //Could I merge it with an other fragment?
238 // TODO should make merging optionnal
239 for(int i=0;i<p_fragments.count();i++)
240 {
252 {
241 codeFragment* frag = p_fragments.at(i);
253 //Could I merge it with an other fragment?
242 if(((frag->address+frag->size)==address) && (merged==false) && (size!=0))
254 bool merged = false;
255 for(int i=0;i<p_fragments.count();i++)
243 {
256 {
244 char* mergedData=(char*)malloc(size+frag->size);
257 codeFragment* frag = p_fragments.at(i);
245 memcpy(mergedData,frag->data,frag->size);
258 if(((frag->address+frag->size)==address) && (merged==false) && (size!=0))
246 memcpy(mergedData+frag->size,data,size);
259 {
247 free(frag->data);
260 merged = mergeFragment(frag,data,size);
248 free(data);
261 }
249 frag->data = mergedData;
262 }
250 frag->size = frag->size+size;
263 if(!merged)
251 merged = true;
264 {
265 fragment = new codeFragment(data,size,address);
266 fragment->header = header;
267 p_fragments.append(fragment);
252 }
268 }
253 }
269 }
254 if(!merged)
270 else
255 {
271 {
256 fragment = new codeFragment(data,size,address);
272 if(newFragment)
257 fragment->header = header;
273 {
258 p_fragments.append(fragment);
274 fragment = new codeFragment(data,size,address);
275 fragment->header = header;
276 p_fragments.append(fragment);
277 newFragment = false;
278 }
279 else
280 {
281 codeFragment* frag = p_fragments.last();
282 mergeFragment(frag,data,size);
283 }
259 }
284 }
285
260 }
286 }
261 else
287 else
262 {
288 {
263
289 if((rectype>=7) && (rectype<=9))
290 {
291 newFragment = true;
292 }
264 }
293 }
265 }
294 }
266 }
295 }
267 }
296 }
268 }
297 }
269
298
299
270 int srecFile::parseLine(const QString &record, quint64 *address, char **data, quint64 *size)
300 int srecFile::parseLine(const QString &record, quint64 *address, char **data, quint64 *size)
271 {
301 {
272 #define newData (*data)
302 #define newData (*data)
@@ -340,6 +370,7 int srecFile::parseLine(const QString &r
340 return recType;
370 return recType;
341 }
371 }
342
372
373
343 char srecFile::lineCheckSum(const QString &line)
374 char srecFile::lineCheckSum(const QString &line)
344 {
375 {
345 char sum=0;
376 char sum=0;
@@ -363,9 +394,15 bool srecFile::checkSum(const QString &l
363 scp.remove('\r');
394 scp.remove('\r');
364 char ck2 = (char)scp.mid(scp.count()-2,2).toInt(0,16);
395 char ck2 = (char)scp.mid(scp.count()-2,2).toInt(0,16);
365 char ck=lineCheckSum(scp.remove(scp.count()-2,2));
396 char ck=lineCheckSum(scp.remove(scp.count()-2,2));
366 return (ck2==ck);
397 if(ck==ck2)
398 {
399 return true;
400 }
401 return false;
402 // return (ck2==ck);
367 }
403 }
368
404
405
369 QString srecFile::buildRecord(int recType, int address,const char *data, int size)
406 QString srecFile::buildRecord(int recType, int address,const char *data, int size)
370 {
407 {
371 QString record;
408 QString record;
@@ -401,3 +438,19 QString srecFile::buildRecord(int recTyp
401 return record.toUpper();
438 return record.toUpper();
402 }
439 }
403
440
441 bool srecFile::mergeFragment(codeFragment *fragment, char *data, int size)
442 {
443 char* mergedData=(char*)malloc(size+fragment->size);
444 if(mergedData!=NULL)
445 {
446 memcpy(mergedData,fragment->data,fragment->size);
447 memcpy(mergedData+fragment->size,data,size);
448 free(fragment->data);
449 free(data);
450 fragment->data = mergedData;
451 fragment->size = fragment->size+size;
452 return true;
453 }
454 return false;
455 }
456
@@ -51,8 +51,11 public:
51 QString getFragmentHeader(int index);
51 QString getFragmentHeader(int index);
52 bool getFragmentData(int index, char **buffer);
52 bool getFragmentData(int index, char **buffer);
53
53
54 bool mergingRecords();
55 void setMergingRecords(bool enabled);
54 bool isSREC();
56 bool isSREC();
55 static bool isSREC(const QString& File);
57 static bool isSREC(const QString& File);
58 static bool checkSum(const QString& line);
56 signals:
59 signals:
57
60
58 public slots:
61 public slots:
@@ -60,13 +63,14 private:
60 void parseFile(QFile* file);
63 void parseFile(QFile* file);
61 static int parseLine(const QString& record, quint64 *address, char** data, quint64 *size);
64 static int parseLine(const QString& record, quint64 *address, char** data, quint64 *size);
62 static char lineCheckSum(const QString& line);
65 static char lineCheckSum(const QString& line);
63 static bool checkSum(const QString& line);
64 static QString buildRecord(int recType,int address,const char* data,int size);
66 static QString buildRecord(int recType,int address,const char* data,int size);
67 static bool mergeFragment(codeFragment* fragment, char* data, int size);
65 QStringList p_fileNames;
68 QStringList p_fileNames;
66 QList<QFile*>p_files;
69 QList<QFile*>p_files;
67 QList<codeFragment*> p_fragments;
70 QList<codeFragment*> p_fragments;
68 int p_lineCount;
71 int p_lineCount;
69 bool p_isSrec;
72 bool p_isSrec;
73 bool p_mergingRecords;
70
74
71 };
75 };
72
76
@@ -46,6 +46,12
46 <property name="contextMenuPolicy">
46 <property name="contextMenuPolicy">
47 <enum>Qt::ActionsContextMenu</enum>
47 <enum>Qt::ActionsContextMenu</enum>
48 </property>
48 </property>
49 <attribute name="horizontalHeaderVisible">
50 <bool>true</bool>
51 </attribute>
52 <attribute name="verticalHeaderVisible">
53 <bool>false</bool>
54 </attribute>
49 <column>
55 <column>
50 <property name="text">
56 <property name="text">
51 <string>Index</string>
57 <string>Index</string>
@@ -7701,6 +7701,11 int PythonQtWrapper_srecFile::lineCount
7701 return ( theWrappedObject->lineCount());
7701 return ( theWrappedObject->lineCount());
7702 }
7702 }
7703
7703
7704 bool PythonQtWrapper_srecFile::mergingRecords(srecFile* theWrappedObject)
7705 {
7706 return ( theWrappedObject->mergingRecords());
7707 }
7708
7704 bool PythonQtWrapper_srecFile::openFile(srecFile* theWrappedObject, const QString& File)
7709 bool PythonQtWrapper_srecFile::openFile(srecFile* theWrappedObject, const QString& File)
7705 {
7710 {
7706 return ( ((PythonQtPublicPromoter_srecFile*)theWrappedObject)->promoted_openFile(File));
7711 return ( ((PythonQtPublicPromoter_srecFile*)theWrappedObject)->promoted_openFile(File));
@@ -7711,6 +7716,11 bool PythonQtWrapper_srecFile::openFile
7711 return ( theWrappedObject->openFiles(Files));
7716 return ( theWrappedObject->openFiles(Files));
7712 }
7717 }
7713
7718
7719 void PythonQtWrapper_srecFile::setMergingRecords(srecFile* theWrappedObject, bool enabled)
7720 {
7721 ( theWrappedObject->setMergingRecords(enabled));
7722 }
7723
7714 bool PythonQtWrapper_srecFile::toBinary(srecFile* theWrappedObject, const QString& File)
7724 bool PythonQtWrapper_srecFile::toBinary(srecFile* theWrappedObject, const QString& File)
7715 {
7725 {
7716 return ( ((PythonQtPublicPromoter_srecFile*)theWrappedObject)->promoted_toBinary(File));
7726 return ( ((PythonQtPublicPromoter_srecFile*)theWrappedObject)->promoted_toBinary(File));
@@ -778,12 +778,12 codeFragment* new_codeFragment(char* da
778 void delete_codeFragment(codeFragment* obj) { delete obj; }
778 void delete_codeFragment(codeFragment* obj) { delete obj; }
779 void py_set_size(codeFragment* theWrappedObject, quint64 size){ theWrappedObject->size = size; }
779 void py_set_size(codeFragment* theWrappedObject, quint64 size){ theWrappedObject->size = size; }
780 quint64 py_get_size(codeFragment* theWrappedObject){ return theWrappedObject->size; }
780 quint64 py_get_size(codeFragment* theWrappedObject){ return theWrappedObject->size; }
781 void py_set_address(codeFragment* theWrappedObject, quint64 address){ theWrappedObject->address = address; }
782 quint64 py_get_address(codeFragment* theWrappedObject){ return theWrappedObject->address; }
783 void py_set_data(codeFragment* theWrappedObject, char* data){ theWrappedObject->data = data; }
784 char* py_get_data(codeFragment* theWrappedObject){ return theWrappedObject->data; }
781 void py_set_header(codeFragment* theWrappedObject, QString header){ theWrappedObject->header = header; }
785 void py_set_header(codeFragment* theWrappedObject, QString header){ theWrappedObject->header = header; }
782 QString py_get_header(codeFragment* theWrappedObject){ return theWrappedObject->header; }
786 QString py_get_header(codeFragment* theWrappedObject){ return theWrappedObject->header; }
783 void py_set_data(codeFragment* theWrappedObject, char* data){ theWrappedObject->data = data; }
784 char* py_get_data(codeFragment* theWrappedObject){ return theWrappedObject->data; }
785 void py_set_address(codeFragment* theWrappedObject, quint64 address){ theWrappedObject->address = address; }
786 quint64 py_get_address(codeFragment* theWrappedObject){ return theWrappedObject->address; }
787 };
787 };
788
788
789
789
@@ -976,8 +976,10 void delete_srecFile(srecFile* obj) { de
976 bool static_srecFile_isSREC(const QString& File);
976 bool static_srecFile_isSREC(const QString& File);
977 bool isopened(srecFile* theWrappedObject);
977 bool isopened(srecFile* theWrappedObject);
978 int lineCount(srecFile* theWrappedObject);
978 int lineCount(srecFile* theWrappedObject);
979 bool mergingRecords(srecFile* theWrappedObject);
979 bool openFile(srecFile* theWrappedObject, const QString& File);
980 bool openFile(srecFile* theWrappedObject, const QString& File);
980 bool openFiles(srecFile* theWrappedObject, const QStringList& Files);
981 bool openFiles(srecFile* theWrappedObject, const QStringList& Files);
982 void setMergingRecords(srecFile* theWrappedObject, bool enabled);
981 bool toBinary(srecFile* theWrappedObject, const QString& File);
983 bool toBinary(srecFile* theWrappedObject, const QString& File);
982 bool static_srecFile_toSrec(QList<codeFragment* > fragments, const QString& File);
984 bool static_srecFile_toSrec(QList<codeFragment* > fragments, const QString& File);
983 bool toSrec(srecFile* theWrappedObject, const QString& File);
985 bool toSrec(srecFile* theWrappedObject, const QString& File);
@@ -3,4 +3,4
3 #export QTDIR=/usr/include
3 #export QTDIR=/usr/include
4 #export QTDIR=/usr/include/qt5
4 #export QTDIR=/usr/include/qt5
5
5
6 pythonqt_generator --include-paths=./genericBinaryFiles/elf:./genericBinaryFiles/srec:./genericBinaryFiles/BinFile:/usr/include/qt5:/usr/include/qt5/QtCore:/usr/include/qt5/QtWidgets --output-directory=pythonQtOut PySocExplorer.h pythonQtgeneratorCfg.txt
6 pythonqt_generator --include-paths=./genericBinaryFiles/:./genericBinaryFiles/elf:./genericBinaryFiles/srec:./genericBinaryFiles/BinFile:/usr/include/qt5:/usr/include/qt5/QtCore:/usr/include/qt5/QtWidgets --output-directory=pythonQtOut PySocExplorer.h pythonQtgeneratorCfg.txt
General Comments 0
You need to be logged in to leave comments. Login now