annotate HexFile.h @ 1:0b3630a29ad8

Initial version based on previous repository. Project was ported to QT6 and in now cmake based.
author Ideenmodellierer <tiefenrauscher@web.de>
date Thu, 27 Nov 2025 18:40:28 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
1 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
2 /// \file HexFile.h
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
3 /// \brief Read .hex file in "Intel HEX" format.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
4 /// \author JD Gascuel.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
5 ///
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
6 /// \copyright (c) 2012-2016, JD Gascuel. All rights reserved.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
7 /// $Id$
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
8 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
9 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
10 // BSD 2-Clause License:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
11 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
12 // Redistribution and use in source and binary forms, with or without
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
13 // modification, are permitted provided that the following conditions
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
14 // are met:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
15 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
16 // 1. Redistributions of source code must retain the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
17 // this list of conditions and the following disclaimer.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
18 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
19 // 2. Redistributions in binary form must reproduce the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
20 // this list of conditions and the following disclaimer in the documentation
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
21 // and/or other materials provided with the distribution.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
22 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
23 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
24 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
25 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
26 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
27 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
28 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
29 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
30 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
31 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
32 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
33 // THE POSSIBILITY OF SUCH DAMAGE.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
34 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
35 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
36 // HISTORY
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
37 // 2012-02-12 : [jDG] Creation for Frog Companion firmware upload.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
38 // 2012-09-22 : [jDG] Updated for OSTC Companion (OSTC3).
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
39 // 2014-07-07 : [jDG] Cleanups for Subsurface google-summer-of-code.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
40 // 2014-07-25 : [jDG] BSD 2-clause license.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
41
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
42 #include <QtGlobal>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
43 #include <QFile>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
44
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
45 class QProgressBar;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
46
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
47 /////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
48 /// \brief Read .hex file in "Intel HEX" format.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
49 ///
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
50 /// \note that OSTC3 firmware is NOT distributed in Intel HEX format,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
51 /// but is first flatened, then encrypted, then written back
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
52 /// in a similar looking format.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
53 class HexFile
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
54 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
55 QFile _file;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
56 size_t _memSize;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
57 size_t _baseAddress; ///< Base for extended address modes.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
58
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
59 unsigned char* _buffer;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
60
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
61 /// \brief Read and interpret on line of the HEX file.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
62 void readLine();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
63
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
64 public:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
65 /// \brief Create an empty object.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
66 HexFile();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
67 ~HexFile();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
68
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
69 /// \brief Allocate initialized space.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
70 bool allocate(size_t memSize, unsigned char fill = 0xFF);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
71 bool sqwiz(size_t newMemSize);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
72
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
73 /// \brief Load the .hex file into the internal buffer.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
74 /// \return TRUE is ok, FAlSE if some error occurs.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
75 void load(const QString& fileName);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
76
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
77 /// \brief Return a pointer to the loaded data.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
78 const unsigned char* data() const;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
79
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
80 /// \brief Returns the 4 bytes checksum of the loaded data.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
81 ///
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
82 /// This is a simple Adler32 checksum: The lower 16bits are the sum of
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
83 /// all the bytes (modulo 65536). And the second 16bits are the sum of
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
84 /// the running sum itself (also modulo 65536).
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
85 unsigned int checksum() const;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
86
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
87 /// \brief Save to encrypted HEX file.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
88 void saveEncrypted(const QString& fileName, unsigned char secretKey[16]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
89
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
90 /// \brief Reload encrypted HEX file.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
91 void loadEncrypted(const QString& fileName, unsigned char secretKey[16]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
92 };