Mercurial > public > ostc_companion
annotate OSTC4Operations.cpp @ 12:ac837fe1d590 default tip
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
| author | Ideenmodellierer |
|---|---|
| date | Mon, 12 Jan 2026 13:58:41 +0000 |
| parents | fc91c3e09285 |
| children |
| 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 OSTC4Operations.h |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
3 /// \brief Implementing various operations for H&W OSTC4 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 OSTC3Operations, HardwareOperations.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) 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 ////////////////////////////////////////////////////////////////////////////// |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
37 #include "OSTC4Operations.h" |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
38 #include <QRegularExpression> |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
39 #include <QSettings> |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
40 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
41 #include "Utils/Exception.h" |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
42 #include "Utils/Log.h" |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
43 #include "Utils/ProgressEvent.h" |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
44 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
45 extern QSettings *settings; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
46 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
47 #define FIRMWARE_BLOCK 0x40 // 64 bytes |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
48 #define FIRMWARE_BLOCK_DELAY 15 // 15 msec. |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
49 #define FIRMWARE_BLOCK_FAST 0x300 // 4096 bytes |
|
1
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 ////////////////////////////////////////////////////////////////////////////// |
|
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 QSize OSTC4Operations::nameSize() const |
|
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 return QSize(12, 4); |
|
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 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
59 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
60 QString OSTC4Operations::model() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
61 { |
| 4 | 62 return "OSTC 4/5"; |
|
1
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 HardwareOperations::CompanionFeatures OSTC4Operations::supported() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
66 { |
| 5 | 67 // No DUMPSCREEN |
| 68 | |
| 69 CompanionFeatures features; | |
| 70 features |= PARAMETERS; | |
| 71 features |= DATE; | |
| 72 features |= NAME; | |
| 73 features |= FIRMWARE; | |
| 74 features |= HELIUM_DIVE; | |
| 75 features |= CCR_DIVE; | |
| 76 features |= BLUETOOTH; | |
| 77 features |= VPM_MODEL; | |
| 78 features |= SIGNAL_CHECK; | |
| 79 features |= ICON; | |
| 80 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
81 return features; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
82 } |
|
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 QString OSTC4Operations::firmwareTemplate() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
85 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
86 return "ostc4*.bin"; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
87 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
88 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
89 QStringList OSTC4Operations::listPorts() const |
|
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 return listBluetoothPorts(); |
|
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 #if 0 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
94 QRegExp OSTC4Operations::portTemplate() const |
|
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 #if defined(Q_OS_MAC) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
97 return QRegExp("tty[.]OSTC4-.*", Qt::CaseInsensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
98 #elif defined(Q_OS_LINUX) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
99 // 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
|
100 return QRegExp("ttyUSB.*", Qt::CaseSensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
101 #elif defined(Q_OS_WIN) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
102 return QRegExp("COM.*", Qt::CaseSensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
103 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
104 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
105 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
106 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
107 QRegularExpression OSTC4Operations::portTemplate() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
108 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
109 #if defined(Q_OS_MAC) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
110 return QRegularExpression("tty[.]OSTC4-.*", QRegularExpression::CaseInsensitiveOption); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
111 #elif defined(Q_OS_LINUX) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
112 // Debian, Ubuntu, RedHat, CentOS, SUSE |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
113 return QRegularExpression("^(rfcomm.*|ttyUSB.*)$"); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
114 #elif defined(Q_OS_WIN) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
115 return QRegularExpression("COM.*"); // default: case-sensitive |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
116 #endif |
|
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 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
119 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
120 void OSTC4Operations::getIdentity() |
|
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 descriptionString.clear(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
123 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
124 LOG_TRACE("Getting model..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
125 HardwareDescriptor hw = hardwareDescriptor(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
126 if (hw != HW_OSTC4) |
| 4 | 127 LOG_THROW("Not an OSTC4/5."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
128 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
129 LOG_TRACE("Getting identity..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
130 getCommonIdentity(); |
|
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 //---- Main firmware ----------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
133 QString mainFW; |
|
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 unsigned char echo = retryCommand(_serial, 'k'); // 0x69 OSTC4 FW Details. |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
136 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
137 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
138 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
139 unsigned char reply[4 + 1]; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
140 _serial.writeByte(0xFF); // Main firmware |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
141 _serial.readBlock(reply, sizeof reply); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
142 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
143 LOG_THROW("Bad main firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
144 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
145 mainFW = QString::asprintf("%d.%02d.%02d%s", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
146 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
147 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
148 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
149 reply[3] ? "beta" : ""); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
150 } |
|
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 //---- RTE firmware ------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
153 QString rteFW; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
154 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
155 unsigned char echo = retryCommand(_serial, 'k'); // 0x69 OSTC4 FW Details. |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
156 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
157 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
158 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
159 unsigned char reply[4 + 1]; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
160 _serial.writeByte(0xFE); // RTE firmware |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
161 _serial.readBlock(reply, sizeof reply); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
162 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
163 LOG_THROW("Bad RTE firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
164 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
165 rteFW = QString::asprintf("%d.%02d.%02d%s", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
166 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
167 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
168 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
169 reply[3] ? "beta" : ""); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
170 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
171 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
172 //---- Font Package ------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
173 QString fontPKG; |
|
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 unsigned char echo = retryCommand(_serial, 'k'); // 0x69 OSTC4 FW Details. |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
176 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
177 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
178 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
179 unsigned char reply[4 + 1]; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
180 _serial.writeByte(0x10); // Font Package |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
181 _serial.readBlock(reply, sizeof reply); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
182 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
183 LOG_THROW("Bad Font package reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
184 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
185 fontPKG = QString::asprintf("%d.%02d.%02d%s", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
186 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
187 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
188 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
189 reply[3] ? "beta" : ""); |
|
1
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 //---- OSTC4 specific description ---------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
193 descriptionString = QString("%1 #%2, fw %3 (main %4/RTE %5/Font %6), %7") |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
194 .arg(model()) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
195 .arg(serialNumber(), 4, 10, QChar('0')) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
196 .arg(QString::asprintf("%d.%02d", firmware() / 100, firmware() % 100)) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
197 .arg(mainFW) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
198 .arg(rteFW) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
199 .arg(fontPKG) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
200 .arg(QString::fromLatin1((char *) (computerText), 60) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
201 .replace(QChar('\0'), "") |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
202 .trimmed()); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
203 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
204 LOG_INFO("Found " << descriptionString); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
209 OSTC4Operations::OSTC4Operations() |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
210 : fileChecksum(0, 0) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
211 { |
| 4 | 212 emulatorName = "OSTC4/5"; |
| 5 | 213 m_crcWrapper = new CrcWrapper(nullptr); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
214 } |
|
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 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
217 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
218 void OSTC4Operations::upgradeFW(const QString &fileName) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
219 { |
| 4 | 220 LOG_INFO("Starting OSTC4/5 firmware upgrade..."); |
|
1
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 openFirmware(fileName, true); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
223 openFirmware(fileName, false); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
224 |
| 4 | 225 LOG_INFO("Please wait for OSTC4/5 to complete installation..."); |
|
1
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 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
228 #define SWAP4BYTES(x) \ |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
229 uint((((x) & 0x000000FF) << 24) | (((x) & 0x0000FF00) << 8) | (((x) & 0x00FF0000) >> 8) \ |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
230 | (((x) & 0xFF000000) >> 24)) |
| 5 | 231 |
| 232 void OSTC4Operations::setIcons(const QString &fileName) | |
| 233 { | |
| 234 int size; | |
| 235 int blockSize; | |
| 236 int transferDelay; | |
| 237 unsigned char echo; | |
| 238 | |
| 239 FirmwareOSTC4 header; | |
| 240 | |
| 241 unsigned char buf3offset[4]; | |
| 242 unsigned char bufVersion[4]; | |
| 243 uint32_t checksum = 0; | |
| 244 uint32_t width = 0; | |
| 245 uint32_t height = 0; | |
| 246 | |
| 247 blockSize = FIRMWARE_BLOCK; | |
| 248 transferDelay = FIRMWARE_BLOCK_DELAY; | |
| 249 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
250 try { |
| 5 | 251 bmp = std::make_unique<BmpToArray>(fileName); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
252 } catch (const std::exception &e) { |
| 5 | 253 std::cerr << "Fehler beim Laden: " << e.what() << '\n'; |
| 254 } | |
| 255 | |
| 256 QByteArray bin = bmp->getTransferBytes(); | |
| 257 bmp->getImageXY(&width, &height); | |
| 258 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
259 if (bin.size() < 0x20000 - 12) /* max bin size - header */ |
| 5 | 260 { |
| 261 buf3offset[0] = 0x20; | |
| 262 buf3offset[1] = 0x00; | |
| 263 buf3offset[2] = 0x00; | |
| 264 buf3offset[3] = 0x00; | |
| 265 bufVersion[0] = 1; | |
| 266 bufVersion[1] = 0; | |
| 267 bufVersion[2] = 0; | |
| 268 bufVersion[3] = 0; | |
| 269 | |
| 270 header.type = 0x20; | |
| 271 /* original header shallnot be modifieded => split image size information into 5 bytes */ | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
272 header.dummy5 = width; /* low byte */ |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
273 header.dummy6 = height; /* low byte */ |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
274 header.dummy7 = (width >> 8) & 0x0000000F; /* shifted high nibble */ |
| 5 | 275 header.dummy7 |= (height >> 4) & 0x000000F0; /* shifted high nibble */ |
| 276 | |
| 277 header.length = SWAP4BYTES(bin.size()); | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
278 header.checksum = bin.size() + (256 * 256 * 256 * header.type) + (256 * 256 * header.dummy5) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
279 + (256 * header.dummy6) + header.dummy7; |
| 5 | 280 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
281 checksum = SWAP4BYTES( |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
282 m_crcWrapper->CRC_CalcBlockCRC(reinterpret_cast<uint32_t *>(bin.data()), |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
283 bin.size() / 4)); |
| 5 | 284 |
| 285 //---- Upload icon ----------------------------------------------- | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
286 const int steps = 3 + (bin.size() + blockSize - 1) / blockSize; |
| 5 | 287 int step = 0; |
| 288 PROGRESS(step++, steps); | |
| 289 | |
| 290 LOG_INFO(QString(" uploading icon size %1 bytes").arg(bin.size())); | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
291 writeText(QString("Upload Icon")); |
| 5 | 292 |
| 293 //---- Command | |
| 294 PROGRESS(step++, steps); | |
| 295 echo = retryCommand(_serial, 'o'); // 0x6F upload icon | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
296 if (echo != 'o') |
| 5 | 297 LOG_THROW("Bad OSTC4/5 icon upload."); |
| 298 | |
| 299 //---- Header | |
| 300 PROGRESS(step++, steps); | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
301 _serial.writeBlock((uchar *) &header, sizeof header); |
| 5 | 302 _serial.sleep(500); |
| 303 //---- Data | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
304 for (int len = 0x00000; len < bin.size(); len += blockSize) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
305 if (transferDelay) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
306 _serial.sleep(transferDelay); // 15 msec between 64B blocks... |
| 5 | 307 } |
| 308 PROGRESS(step++, steps); | |
| 309 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
310 size = qMin(blockSize, bin.size() - len); |
| 5 | 311 |
| 312 LOG_TRACE("Fill " << size); | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
313 _serial.writeBlock((uchar *) bin.data() + len, (unsigned int) size); |
| 5 | 314 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
315 _serial.writeBlock((uchar *) &checksum, 4); |
| 5 | 316 PROGRESS(steps, steps); // 100% |
| 317 | |
| 318 //---- Wait acknowledge ---------------------------------------------- | |
| 319 PROGRESS_THROTTLE(); | |
| 320 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
321 for (int wait = 0; wait < 2 * 60; ++wait) // Up to 2 min... |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
322 { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
323 try { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
324 unsigned char reply = _serial.readByte(); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
325 if (reply == 0x4D) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
326 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
327 } catch (const ReadTimeout &) { |
| 5 | 328 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
329 } |
| 5 | 330 |
| 331 LOG_INFO(" icon uploaded."); | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
332 } else { |
| 6 | 333 LOG_THROW("Image to large. Must be < 128k."); |
| 5 | 334 } |
| 335 PROGRESS_RESET(); | |
| 336 } | |
| 337 | |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
338 ////////////////////////////////////////////////////////////////////////////// |
|
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 /// FIRMWARE UPGRADE /// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
341 ////////////////////////////////////////////////////////////////////////////// |
|
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 OSTC4Operations::openFirmware(const QString &fileName, bool dryRun) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
347 { |
| 4 | 348 LOG_TRACE("Opening OSTC4/5 firmware '" << fileName << "'..."); |
|
1
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 bool forceFirmwareUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
351 bool forceRTEUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
352 bool forceFontlibUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
353 bool useFastMode; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
354 bool firmwareSupportFastMode = false; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
355 int size; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
356 int blockSize; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
357 int transferDelay; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
358 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
359 // Previous trial failed ? |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
360 if (_file.isOpen()) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
361 _file.close(); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
362 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
363 _file.setFileName(fileName); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
364 if (!_file.open(QIODevice::ReadOnly)) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
365 LOG_THROW("Cannot open BIN file " << fileName); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
366 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
367 // Get settings to overwrite version check |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
368 forceFirmwareUpdate = settings->value("OSTC/forceFirmwareUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
369 forceRTEUpdate = settings->value("OSTC/forceRTEUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
370 forceFontlibUpdate = settings->value("OSTC/forceFontlibUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
371 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
372 useFastMode = settings->value("OSTC/useFastMode", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
373 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
374 //---- Check consistency ------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
375 fileChecksum.reset(0, 0); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
376 for (int part = 1; part < 4; ++part) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
377 // Less than 3 parts ? |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
378 if ((_file.size() - _file.pos()) < 16) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
379 break; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
380 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
381 if (dryRun) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
382 LOG_TRACE("Checking part " << part << "..."); |
|
1
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 FirmwareOSTC4 header; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
385 QByteArray bin; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
386 loadFirmwarePart(header, bin, part, dryRun); |
|
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 QString name = QString::asprintf("%s v%d.%02d.%02d%s", |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
389 header.type == 0x10 ? "Font" |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
390 : header.type == 0xFF ? "FW " |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
391 : header.type == 0xFE ? "RTE " |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
392 : "??? ", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
393 header.version.x, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
394 header.version.y, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
395 header.version.z, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
396 header.version.beta ? " beta" : ""); |
|
1
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 //---- On first pass, just check file structure ---------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
399 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
400 continue; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
401 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
402 //---- On second pass, do upload new stuff --------------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
403 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
404 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
405 if (_connectMode != SERVICE_MODE) |
| 4 | 406 LOG_THROW("Cannot connect OSTC 4/5 service mode..."); |
|
1
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 //---- Check if needed ? --------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
409 LOG_TRACE("Check part " << part << " is needed ?"); |
| 4 | 410 unsigned char echo = retryCommand(_serial, 'k'); // 0x6B OSTC4 FW Details. |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
411 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
412 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
413 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
414 unsigned char reply[4 + 1]; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
415 _serial.writeByte(header.type); // type of firmware part |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
416 _serial.readBlock(reply, sizeof reply); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
417 if (reply[4] != 0x4C) // SERVICE MODE only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
418 LOG_THROW("Bad firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
419 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
420 if (((reply[0] * 100 + reply[1] * 10 + reply[2]) > 151) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
421 && (header.type == 0xFF)) /* suitable firmware version? First supported in 1.5.2 */ |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
422 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
423 firmwareSupportFastMode = true; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
424 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
425 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
426 if ((header.version.x == reply[0] && header.version.y == reply[1] |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
427 && header.version.z == reply[2]) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
428 && (!(forceFirmwareUpdate && header.type == 0xFF)) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
429 && (!(forceRTEUpdate && header.type == 0xFE)) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
430 && (!(forceFontlibUpdate && header.type == 0x10))) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
431 LOG_INFO(" part " << part << ": " << name << " already up-to-date."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
432 continue; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
433 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
434 if ((useFastMode) && (firmwareSupportFastMode)) /* is fast mode supported ? */ |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
435 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
436 blockSize = FIRMWARE_BLOCK_FAST; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
437 transferDelay = 1; |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
438 } else { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
439 blockSize = FIRMWARE_BLOCK; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
440 transferDelay = FIRMWARE_BLOCK_DELAY; |
|
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 //---- Upload firwmare ----------------------------------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
443 const int steps = 3 + (bin.size() + blockSize - 1) / blockSize; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
444 int step = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
445 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
446 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
447 LOG_INFO(" uploading part " << part << ": " << name << "..."); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
448 writeText(QString("Upload Part %1").arg(part)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
449 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
450 //---- Command |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
451 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
452 echo = retryCommand(_serial, 's'); // 0x73 OSTC4 FW Upgrade |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
453 if (echo != 's') |
| 4 | 454 LOG_THROW("Bad OSTC4/5 FW upgrade commande."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
455 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
456 //---- Header |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
457 PROGRESS(step++, steps); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
458 _serial.writeBlock((uchar *) &header, sizeof header); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
459 _serial.sleep(500); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
460 //---- Data |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
461 for (int len = 0x00000; len < bin.size(); len += blockSize) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
462 if (transferDelay) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
463 _serial.sleep(transferDelay); // 15 msec between 64B blocks... |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
464 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
465 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
466 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
467 size = qMin(blockSize, bin.size() - len); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
468 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
469 LOG_TRACE("Fill " << size); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
470 _serial.writeBlock((uchar *) bin.data() + len, (unsigned int) size); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
471 } |
|
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 PROGRESS(steps, steps); // 100% |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
474 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
475 //---- Wait acknowledge ---------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
476 // RTE seems to miss the acknowledge byte ... |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
477 if (header.type != 0xFE) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
478 PROGRESS_THROTTLE(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
479 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
480 for (int wait = 0; wait < 2 * 60; ++wait) // Up to 2 min... |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
481 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
482 try { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
483 unsigned char reply = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
484 if (reply == 0x4C) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
485 break; |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
486 } catch (const ReadTimeout &) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
487 } |
|
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 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
490 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
491 LOG_INFO(" part " << part << ": " << name << " uploaded."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
492 } |
|
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 //---- Done -------------------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
495 // Low-level close, to avoid trying to send a 0xFF byte... |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
496 if (!dryRun) { |
|
3
4ace58a7c03c
Send disconnect command before closing the connection
Ideenmodellierer
parents:
1
diff
changeset
|
497 disconnect(true); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
498 } |
|
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 PROGRESS_RESET(); |
|
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 //---- Check FILE checksum on first pass --------------------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
503 if (dryRun) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
504 uint expected; |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
505 if (4 != _file.read((char *) &expected, sizeof expected)) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
506 LOG_THROW("Missing file checksum."); |
|
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 uint checksum = fileChecksum.a() | (fileChecksum.b() << 16); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
509 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
510 if (checksum != expected) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
511 LOG_ERROR(QString::asprintf("File checksum ERROR: expected = %04X, actual = %04X", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
512 expected, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
513 checksum)); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
514 else if (dryRun) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
515 LOG_TRACE(QString::asprintf("File checksum = %04X (OK)", checksum)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
516 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
517 if (!_file.atEnd()) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
518 LOG_THROW("Extra data after last block."); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
521 _file.close(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
522 } |
|
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 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
526 void OSTC4Operations::loadFirmwarePart(FirmwareOSTC4 &header, QByteArray &bin, int part, bool dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
527 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
528 memset(&header, 0, sizeof header); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
529 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
530 //---- Read part header and check consistency ---------------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
531 if (sizeof header != _file.read((char *) &header, sizeof header)) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
532 LOG_THROW("EOF in header."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
533 fileChecksum.add(&header, sizeof header); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
534 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
535 uint checksum = SWAP4BYTES(header.length) + SWAP4BYTES(*(uint *) &header.type); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
536 if (checksum != header.checksum) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
537 LOG_THROW( |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
538 QString::asprintf("Inconsistent header (%04X != %04X).", checksum, header.checksum)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
539 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
540 if (SWAP4BYTES(header.length) > (1024 * 1024) || (SWAP4BYTES(header.length) % 4)) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
541 LOG_THROW("Inconsistent header (part=" << part << ", size=" << SWAP4BYTES(header.length) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
542 << ")."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
543 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
544 if (dryRun) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
545 switch (header.type) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
546 case 0x10: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
547 LOG_TRACE("... font"); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
548 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
549 case 0xFF: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
550 LOG_TRACE("... firmware"); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
551 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
552 case 0xFE: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
553 LOG_TRACE("... RTE"); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
554 break; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
555 default: |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
556 // LOG_THROW("Inconsistent header (part=" << part << ", type=0x" << QString::asprintf(int(header.type), 16) << ")."); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
557 LOG_THROW("Inconsistent header (part=" << part << ", type=0x" |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
558 << QString::asprintf("Value = %d", header.type) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
559 << ")."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
560 break; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
561 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
562 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
563 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
564 LOG_TRACE("... version " << QString::asprintf("%d.%02d.%02d.%s", |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
565 header.version.x, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
566 header.version.y, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
567 header.version.z, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
568 header.version.beta ? " beta" : "")); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
569 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
570 //---- Read Binary Data -------------------------------------------------- |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
571 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
572 LOG_TRACE("... size " << SWAP4BYTES(header.length) << " bytes."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
573 bin.resize(SWAP4BYTES(header.length) + 4); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
574 assert((uint) bin.size() == SWAP4BYTES(header.length) + 4); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
575 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
576 if (bin.size() != _file.read(bin.data(), bin.size())) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
577 LOG_THROW("EOF in data."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
578 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
579 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
580 LOG_TRACE("... checksum " << QString::asprintf("%08x", |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
581 *(uint *) (bin.data() |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
582 + SWAP4BYTES(header.length)))); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
583 fileChecksum.add(bin); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
584 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
585 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
586 void OSTC4Operations::getSignal() |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
587 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
588 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
589 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
590 unsigned char echo = retryCommand(_serial, 'l'); // 0x6c request bluetooth signal |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
591 if (echo != 0x6C) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
592 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
593 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
594 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
595 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
596 unsigned char ok = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
597 if (ok != 0x4D) // DOWNLOAD mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
598 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
599 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
600 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
601 void OSTC4Operations::getAllHeader(unsigned char *pBuffer) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
602 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
603 unsigned char index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
604 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
605 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
606 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
607 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
608 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
609 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
610 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
611 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
612 unsigned char echo = retryCommand(_serial, 0x85); // 0x85 request all headers (dump) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
613 if (echo != 0x85) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
614 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
615 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
616 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
617 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
618 for (index = 0; index < 8; index++) // Expect 8 blocks a 0x8000 |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
619 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
620 _serial.readBlock(pBuffer + (index * 0x8000), 0x8000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
621 LOG_INFO((".")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
622 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
623 *(pBuffer + (index * 0x8000)) = _serial.readByte(); // get lastdiveID |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
624 LOG_INFO(QString::asprintf("%d", *(pBuffer + (index * 0x8000)))); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
625 unsigned char ok = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
626 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
627 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
628 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
629 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
630 void OSTC4Operations::writeAllHeader(unsigned char *pBuffer) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
631 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
632 unsigned char index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
633 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
634 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
635 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
636 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
637 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
638 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
639 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
640 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
641 unsigned char echo = retryCommand(_serial, 0x86); // 0x86 request all headers (dump) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
642 if (echo != 0x86) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
643 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
644 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
645 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
646 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
647 for (index = 0; index < 8; index++) // Expect 8 blocks a 0x8000 |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
648 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
649 _serial.writeBlock(pBuffer + (index * 0x8000), 0x8000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
650 LOG_INFO((".")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
651 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
652 _serial.writeByte(*(pBuffer + (index * 0x8000))); // write lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
653 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
654 unsigned char ok = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
655 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
656 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
657 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
658 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
659 void OSTC4Operations::getAllSamples(unsigned char *pBuffer) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
660 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
661 unsigned short index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
662 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
663 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
664 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
665 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
666 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
667 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
668 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
669 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
670 unsigned char echo = retryCommand(_serial, 0x88); // 0x88 request all samples (dump) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
671 if (echo != 0x88) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
672 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
673 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
674 _serial.sleep(500); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
675 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
676 for (index = 0; index < 384; index++) // Expect 8 blocks a 0x8000 |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
677 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
678 _serial.readBlock(pBuffer + (index * 0x8000), 0x8000); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
679 LOG_INFO(QString::asprintf("%d", index)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
680 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
681 _serial.readBlock(pBuffer + (index * 0x8000), 4); // get lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
682 unsigned char ok = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
683 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
684 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
685 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
686 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
687 void OSTC4Operations::writeAllSamples(unsigned char *pBuffer) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
688 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
689 unsigned short index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
690 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
691 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
692 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
693 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
694 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
695 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
696 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
697 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
698 unsigned char echo = retryCommand(_serial, 0x89); // 0x88 request all samples (dump) |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
699 if (echo != 0x89) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
700 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
701 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
702 _serial.sleep(500); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
703 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
704 for (index = 0; index < 384; index++) // Expect 8 blocks a 0x8000 384 |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
705 { |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
706 _serial.writeBlock((const unsigned char *) (pBuffer + (index * 0x8000)), 0x8000); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
707 LOG_INFO(QString::asprintf("%d", index)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
708 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
709 _serial.writeBlock(pBuffer + (index * 0x8000), 4); // set lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
710 unsigned char ok = _serial.readByte(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
711 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
712 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
713 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
714 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
715 ////////////////////////////////////////////////////////////////////////////// |
