annotate OSTC2cOperations.cpp @ 2:177f640940f2

Update exception class and cleanup redifinitions During firmware download and exception caused the application to stop. Rootcause was the defference between QT5 and QT6 exception and string handling which is updated now. In addition some old definitions were removed to avoid compiler warnings.
author Ideenmodellierer
date Fri, 28 Nov 2025 19:57:35 +0100
parents 0b3630a29ad8
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 OSTC2cOperations.h
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
3 /// \brief Implementing various operations for H&W OSTC2, mk2, 2n, 2c dive computer
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 /// \sa ComputerOperations.h
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
6 ///
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
7 /// \copyright (c) 2011-2016 JD Gascuel. All rights reserved.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
8 /// $Id$
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 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
11 // BSD 2-Clause License:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
12 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
13 // 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
14 // modification, are permitted provided that the following conditions
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
15 // are met:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
16 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
17 // 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
18 // this list of conditions and the following disclaimer.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
19 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
20 // 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
21 // 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
22 // and/or other materials provided with the distribution.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
23 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
24 // 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
25 // 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
26 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
27 // 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
28 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
29 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
30 // 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
31 // 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
32 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
33 // 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
34 // THE POSSIBILITY OF SUCH DAMAGE.
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 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
37
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
38 #include "OSTC2cOperations.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
39
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
40 #include "HexFile.h"
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 "SettingsDialog.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
43
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
44 #include "Utils/Exception.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
45 #include "Utils/Log.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
46 #include "Utils/ProgressEvent.h"
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 #include <QDateTime>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
49 #include <QRegularExpression>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
50
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
51 #define FIRMWARE_SIZE 0x17F40
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
52
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
53 // 64 bytes on Mk.2/2n/2c:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
54 #define FIRMWARE_BLOCK_SIZE 0x40
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
55
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
56 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
57
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
58 OSTC2cOperations::OSTC2cOperations()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
59 : HardwareOperations(),
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
60 _computerFirmware(0),
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
61 _computerSerial(0)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
62 {
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
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
65 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
66
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
67 void OSTC2cOperations::readBank0(byte bank0[])
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 _serial.sleep(100);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
70 _serial.purge();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
71 _serial.writeByte('g');
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
72 _serial.readBlock(bank0, 256);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
73 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
74
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
75 void OSTC2cOperations::writeBank0(const byte bank0[])
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 _serial.sleep(100);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
78 _serial.purge();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
79 _serial.writeByte('d');
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
80 int reply = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
81 if( reply != 'd' )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
82 LOG_THROW("Write start");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
83
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
84 for(int a=4; a<256; ++a) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
85 _serial.writeByte(bank0[a]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
86 reply = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
87 if( reply != bank0[a] )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
88 LOG_THROW("Write bank0 @ " << a);
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
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
91 _serial.sleep(500); // Allow OSTC2c some time to reboot
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
92 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
93
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
94 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
95
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
96 void OSTC2cOperations::readBank1(byte bank1[256])
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
97 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
98 _serial.sleep(100);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
99 _serial.purge();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
100 _serial.writeByte('j');
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
101 _serial.readBlock(bank1, 256);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
102 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
103
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
104 void OSTC2cOperations::getIdentity()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
105 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
106 byte bank0[256], bank1[256];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
107 memset(bank0, 0xFF, sizeof bank0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
108 memset(bank1, 0xFF, sizeof bank1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
109
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
110 //---- Get a memory dump:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
111 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
112 readBank0(bank0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
113 readBank1(bank1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
114 } catch(ReadTimeout) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
115 LOG_THROW("No reply from OSTC Mk.2, 2n or 2c...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
116 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
117
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
118 // Sanity check:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
119 if( bank0[65] == 0xFF || bank1[1] > 99 || bank1[2] > 99 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
120 LOG_THROW("Not an OSTC Mk.2, 2n or 2c...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
121
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
122 _computerSerial = bank0[0] + bank0[1]*256;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
123 _computerFirmware = bank1[1] * 100 + bank1[2];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
124 _customText = QString::fromLatin1((char*)bank0+65, 25).section('}', 0,0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
125
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
126 _description = QString("%1 #%2, v%3.%4, %5")
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
127 .arg(model())
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
128 .arg(_computerSerial)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
129 .arg(bank1[1]).arg(bank1[2], 2, 10, QChar('0'))
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
130 .arg( _customText );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
131 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
132
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
133 int OSTC2cOperations::firmware() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
134 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
135 return _computerFirmware;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
136 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
137
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
138 int OSTC2cOperations::serialNumber() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
139 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
140 return _computerSerial;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
141 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
142
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
143 QString OSTC2cOperations::customText() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
144 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
145 return _customText;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
146 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
147
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
148 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
149 #if 0
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
150 QRegExp OSTC2cOperations::portTemplate() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
151 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
152 #if defined(Q_OS_MAC)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
153 return QRegExp("tty.usbserial-.*", Qt::CaseInsensitive);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
154 #elif defined(Q_OS_LINUX)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
155 // Seems ok for debian, ubuntu, redhat, CentOS and SUSE (google dixit)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
156 return QRegExp("ttyUSB.*", Qt::CaseSensitive);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
157 #elif defined(Q_OS_WIN)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
158 return QRegExp("COM.*", Qt::CaseSensitive);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
159 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
160 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
161 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
162 QRegularExpression OSTC2cOperations::portTemplate() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
163 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
164 #if defined(Q_OS_MAC)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
165 return QRegularExpression("tty.usbserial-.*",
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
166 QRegularExpression::CaseInsensitiveOption);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
167 #elif defined(Q_OS_LINUX)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
168 return QRegularExpression("ttyUSB.*"); // default: case-sensitive
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
169 #elif defined(Q_OS_WIN)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
170 return QRegularExpression("COM.*"); // default: case-sensitive
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
171 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
172 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
173 QStringList OSTC2cOperations::listPorts() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
174 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
175 return listUSBPorts();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
176 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
177
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
178 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
179
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
180 QString OSTC2cOperations::model() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
181 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
182 return "OSTC2c";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
183 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
184
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
185 QString OSTC2cOperations::description()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
186 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
187 return _description;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
188 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
189
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
190 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
191
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
192 HardwareOperations::CompanionFeatures OSTC2cOperations::supported() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
193 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
194 // No ICON.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
195 return CompanionFeatures(PARAMETERS|DATE|NAME|DUMPSCREEN|FIRMWARE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
196 |HELIUM_DIVE|CCR_DIVE);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
197 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
198
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
199 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
200
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
201 QString OSTC2cOperations::firmwareTemplate() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
202 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
203 return "mk2_*.hex";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
204 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
205
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
206 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
207
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
208 bool OSTC2cOperations::connect()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
209 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
210 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
211 LOG_TRACE("Connecting " << Settings::port);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
212 _serial.open(Settings::port, "OSTC2c");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
213 getIdentity();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
214 return true;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
215 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
216 catch(const Exception& e){
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
217 _serial.close();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
218 LOG_THROW("Cannot connect " << Settings::port << ": " << e.what());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
219 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
220 return false;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
221 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
222
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
223 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
224
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
225 QSize OSTC2cOperations::nameSize() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
226 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
227 return QSize(25, 1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
228 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
229
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
230 void OSTC2cOperations::writeText(const QString& msg)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
231 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
232 // No hardware support for that. Just skip it, as it is done when
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
233 // writting bank1...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
234 LOG_TRACE(msg);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
235 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
236
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
237 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
238
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
239 void OSTC2cOperations::connectServiceMode()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
240 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
241 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
242 _serial.open(Settings::port, "OSTC2c");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
243
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
244 _serial.writeByte(0xC1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
245 _serial.sleep(500); // 0.50 sec for bootloader to start.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
246
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
247 //---- Send C1C1 to start upgrading firmware -----------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
248 unsigned char pic = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
249 unsigned char ok = '?';
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
250 for(int retry=0; retry < 10; ++retry) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
251 _serial.writeByte(0xC1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
252 _serial.sleep(5);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
253 _serial.writeByte(0xC1);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
254 _serial.sleep(5);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
255
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
256 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
257 pic = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
258 ok = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
259 break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
260 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
261 catch(const ReadTimeout&) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
262 if( retry == 9 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
263 LOG_THROW("Cannot start firmware upgrade: timeout.");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
264
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
265 LOG_INFO("Connecting OSTC2c (" << (retry+1) << "/10)...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
266 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
267 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
268
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
269 //---- Check PIC type ----------------------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
270 LOG_TRACE("Pic = " << int(pic));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
271 if( ! pic )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
272 LOG_THROW("Cannot sync firmware upgrade. Cannot detect chip");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
273
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
274 if( pic != 0x57
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
275 || ok != 'K'
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
276 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
277 LOG_THROW( "Cannot sync firmware upgrade. Bad chip " << int(pic) << " " << ok);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
278
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
279 _serial.sleep(50); // Wait 0.050 sec here.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
280 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
281 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
282 catch(const Exception& e) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
283 _serial.close();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
284 LOG_THROW("Cannot connect " << Settings::port << ": " << e.what());
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
285 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
286 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
287 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
288
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
289 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
290
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
291 bool OSTC2cOperations::disconnect(bool /*closing*/)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
292 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
293 if( ! _serial.isOpen() ) return false;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
294
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
295 LOG_TRACE("Disconnecting.");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
296
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
297 _serial.purge();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
298 _serial.close();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
299
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
300 return true;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
301 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
302
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
303 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
304
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
305 void OSTC2cOperations::setDate(const QDateTime &date)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
306 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
307 unsigned char buffer[6];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
308 buffer[0] = date.time().hour();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
309 buffer[1] = date.time().minute();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
310 buffer[2] = date.time().second();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
311 buffer[3] = date.date().month();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
312 buffer[4] = date.date().day();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
313 buffer[5] = date.date().year() % 100;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
314
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
315 _serial.sleep(100); // Make sure last command is finished.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
316 _serial.purge();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
317 _serial.writeByte('b'); // 0x62
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
318
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
319 unsigned char reply = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
320 if( reply != 'b' )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
321 LOG_THROW( "sync time" );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
322
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
323 _serial.writeBlock( buffer, sizeof buffer);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
324 _serial.sleep(100);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
325 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
326
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
327 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
328
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
329 void OSTC2cOperations::setName(const QString &newName)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
330 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
331 QByteArray padded = (newName + QString(25, '}'))
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
332 .left(25)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
333 .toLatin1();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
334
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
335 byte bank0[256] = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
336 readBank0(bank0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
337 memcpy(bank0+65, padded.constData(), 25);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
338 writeBank0(bank0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
339
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
340 // Then get the new identity:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
341 getIdentity();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
342 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
343
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
344 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
345
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
346 void OSTC2cOperations::setIcons(const QString &/*fileName*/)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
347 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
348 LOG_THROW("Not supported");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
349 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
350
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
351 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
352
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
353 QImage OSTC2cOperations::dumpScreen() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
354 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
355 QImage image(320, 240, QImage::Format_RGB32);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
356
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
357 //---- Send dump screen command -------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
358 unsigned char reply;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
359 _serial.writeByte('l');
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
360 reply = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
361
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
362 if( reply != 'l' )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
363 LOG_THROW( "Dumpscreen command failed: " << (int)reply );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
364
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
365 //---- Read image ----------------------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
366 int percent = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
367 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
368 for(int x=0; x<320; ++x)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
369 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
370 int p = x/16; // 5% steps
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
371 if( p != percent )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
372 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
373 PROGRESS(p, 320/16);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
374 percent = p;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
375 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
376 int pix = 0, count = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
377
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
378 for(int y=0; y<240; ++y, --count)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
379 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
380 if( count <= 0 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
381 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
382 count = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
383
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
384 if( (count & 0x80) == 0 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
385 pix = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
386 else if( (count & 0xC0) == 0xC0 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
387 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
388 pix = 0xFFFF;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
389 count &= 0x3F;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
390 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
391 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
392 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
393 unsigned char bpix[2];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
394 _serial.readBlock(bpix, 2);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
395 pix = (bpix[0] << 8) + bpix[1];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
396 count &= 0x3F;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
397 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
398 count++;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
399 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
400 // Bit extension 5bits --> 8bits:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
401 // 12345123.45 = (12345 * 0b100001) / 4
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
402 // 12345612.3456 = (123456 * 0xb1000001) / 16
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
403 int r = (31 & (pix >> 11)) * 255/31;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
404 int g = (63 & (pix >> 5)) * 255/63;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
405 int b = (31 & pix ) * 255/31;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
406 image.setPixel(x, y, qRgb( r, g, b));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
407 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
408 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
409 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
410 catch( ReadTimeout ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
411 LOG_THROW("Missing image data...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
412 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
413
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
414 //---- Done ----------------------------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
415 PROGRESS_RESET();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
416 LOG_INFO( "Screen dumped." );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
417 return image;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
418 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
419
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
420 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
421
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
422 void OSTC2cOperations::loadFirmware(HexFile& hex, const QString& fileName) const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
423 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
424 hex.allocate(FIRMWARE_SIZE);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
425 hex.load(fileName);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
426
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
427 //---- Patch Firmware intialization GOTO ---------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
428 memcpy((void*)(hex.data() + 0x17F38), // To bootloader vector
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
429 (void*)(hex.data() + 0x00000), // From fw reset code
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
430 8); // Up to 8 bytes...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
431
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
432 static unsigned char byteCode[8] = {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
433 0xA0, 0xEF, 0xBF, 0xF0, // goto 0x1F740 (bootloader 19k)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
434 0x00, 0x00, // nop
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
435 0x00, 0x00 // nop
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
436 };
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
437 memcpy((void*)(hex.data() + 0x00000), // To OSTC reset vector
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
438 (void*)(byteCode), // From go back to bootloader.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
439 8); // Up to 8 bytes...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
440 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
441
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
442 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
443
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
444 static void
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
445 uploadBlock(Serial& serial, const HexFile& hex, size_t addr)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
446 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
447 const unsigned char count = FIRMWARE_BLOCK_SIZE;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
448 assert( 0 < count && count < 255 );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
449 assert((addr+count) <= FIRMWARE_SIZE );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
450 unsigned char reply = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
451
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
452 unsigned char header[4];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
453 header[0] = 0x1F & (addr >> 16);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
454 header[1] = 0xFF & (addr >> 8);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
455 header[2] = 0xFF & (addr);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
456 header[3] = count;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
457
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
458 unsigned char crc = header[0] + header[1] + header[2] + header[3];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
459 for(int i=0; i<count; ++i)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
460 crc += hex.data()[addr+i];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
461 crc = -crc; // Sum should make zero.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
462
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
463 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
464 serial.writeBlock(header, sizeof header);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
465 serial.writeBlock(hex.data()+addr, count);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
466 serial.writeByte(crc);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
467 } catch(...) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
468 goto WriteFailed;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
469 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
470
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
471 serial.sleep(20); // 18msec for a FLASH row write, plus VAT.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
472
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
473 reply = serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
474 if( reply != 'K' )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
475 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
476 serial.close();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
477 LOG_THROW( QString("Bad checksum at 0x%1").arg((unsigned int)addr, 0, 16, QChar('0')));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
478 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
479 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
480
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
481 WriteFailed:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
482 serial.close();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
483
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
484 LOG_THROW( QString("Write failed") );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
485 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
486
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
487 void OSTC2cOperations::upgradeFW(const QString& fileName)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
488 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
489 //---- Load and check firmware ---------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
490 LOG_TRACE("Loading firmware '" << fileName << "'.");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
491 HexFile hex;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
492 loadFirmware(hex, fileName);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
493
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
494 //---- Enter uart_115k_bootloader ----------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
495 connectServiceMode();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
496
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
497 //---- Let's do it -------------------------------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
498 int percent = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
499
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
500 for(size_t addr = FIRMWARE_BLOCK_SIZE; addr < FIRMWARE_SIZE; addr += FIRMWARE_BLOCK_SIZE)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
501 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
502 int p = int((addr*200.0f) / float(FIRMWARE_SIZE) + 0.5f);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
503 if( p > percent )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
504 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
505 PROGRESS(percent, 200);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
506 percent = p;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
507 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
508 uploadBlock(_serial, hex, addr);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
509 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
510 PROGRESS(200, 200);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
511 uploadBlock(_serial, hex, 0);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
512
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
513 PROGRESS_RESET();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
514 LOG_INFO("Upgrade FW send.");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
515
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
516 // More than 500ms --> receive timeout.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
517 _serial.sleep(600);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
518 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
519
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
520 void OSTC2cOperations::getSignal()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
521 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
522 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
523 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
524
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
525 void OSTC2cOperations::getAllHeader(unsigned char* pBuffer)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
526 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
527 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
528 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
529 void OSTC2cOperations::writeAllHeader(unsigned char* pBuffer)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
530 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
531 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
532 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
533
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
534 void OSTC2cOperations::getAllSamples(unsigned char* pBuffer)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
535 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
536 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
537 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
538 void OSTC2cOperations::writeAllSamples(unsigned char* pBuffer)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
539 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
540 return;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
541 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
542 //////////////////////////////////////////////////////////////////////////////