Mercurial > public > ostc_companion
annotate OSTC4Operations.cpp @ 14:e47e0f59101d default tip
Enable OSTC 4/5 Icon option
The button for uploading the icon is now activated based on the first FW
version supporting this function
| author | Ideenmodellierer |
|---|---|
| date | Mon, 12 Jan 2026 18:47:00 +0100 |
| parents | ac837fe1d590 |
| 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 |
| 14 | 51 #define MIN_FW_ICON_MAJOR 1 |
| 52 #define MIN_FW_ICON_MINOR 7 | |
| 53 #define MIN_FW_ICON_STEP 5 | |
| 54 | |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
55 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
56 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
57 QSize OSTC4Operations::nameSize() const |
|
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 return QSize(12, 4); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
60 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
61 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
62 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
63 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
64 QString OSTC4Operations::model() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
65 { |
| 4 | 66 return "OSTC 4/5"; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
67 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
68 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
69 HardwareOperations::CompanionFeatures OSTC4Operations::supported() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
70 { |
| 5 | 71 // No DUMPSCREEN |
| 72 | |
| 14 | 73 return m_supportedFeatures; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
74 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
75 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
76 QString OSTC4Operations::firmwareTemplate() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
77 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
78 return "ostc4*.bin"; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
79 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
80 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
81 QStringList OSTC4Operations::listPorts() const |
|
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 return listBluetoothPorts(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
84 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
85 #if 0 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
86 QRegExp OSTC4Operations::portTemplate() const |
|
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 #if defined(Q_OS_MAC) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
89 return QRegExp("tty[.]OSTC4-.*", Qt::CaseInsensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
90 #elif defined(Q_OS_LINUX) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
91 // 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
|
92 return QRegExp("ttyUSB.*", Qt::CaseSensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
93 #elif defined(Q_OS_WIN) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
94 return QRegExp("COM.*", Qt::CaseSensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
95 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
96 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
97 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
98 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
99 QRegularExpression OSTC4Operations::portTemplate() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
100 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
101 #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
|
102 return QRegularExpression("tty[.]OSTC4-.*", QRegularExpression::CaseInsensitiveOption); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
103 #elif defined(Q_OS_LINUX) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
104 // 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
|
105 return QRegularExpression("^(rfcomm.*|ttyUSB.*)$"); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
106 #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
|
107 return QRegularExpression("COM.*"); // default: case-sensitive |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
108 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
109 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
110 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
111 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
112 void OSTC4Operations::getIdentity() |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
113 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
114 descriptionString.clear(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
115 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
116 LOG_TRACE("Getting model..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
117 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
|
118 if (hw != HW_OSTC4) |
| 4 | 119 LOG_THROW("Not an OSTC4/5."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
120 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
121 LOG_TRACE("Getting identity..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
122 getCommonIdentity(); |
|
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 //---- Main firmware ----------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
125 QString mainFW; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
126 { |
| 14 | 127 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
|
128 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
129 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
130 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
131 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
|
132 _serial.writeByte(0xFF); // Main firmware |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
133 _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
|
134 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
135 LOG_THROW("Bad main firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
136 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
137 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
|
138 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
139 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
140 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
141 reply[3] ? "beta" : ""); |
| 14 | 142 if((reply[0] > MIN_FW_ICON_MAJOR) |
| 143 || ((reply[0] == MIN_FW_ICON_MAJOR) && (reply[1] > MIN_FW_ICON_MINOR)) | |
| 144 || ((reply[0] == MIN_FW_ICON_MAJOR) && (reply[1] = MIN_FW_ICON_MINOR) && (reply[2] >= MIN_FW_ICON_STEP))) | |
| 145 { | |
| 146 m_supportedFeatures |= ICON; | |
| 147 } | |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
148 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
149 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
150 //---- RTE firmware ------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
151 QString rteFW; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
152 { |
| 14 | 153 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
|
154 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
155 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
156 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
157 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
|
158 _serial.writeByte(0xFE); // RTE firmware |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
159 _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
|
160 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
161 LOG_THROW("Bad RTE firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
162 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
163 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
|
164 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
165 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
166 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
167 reply[3] ? "beta" : ""); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
168 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
169 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
170 //---- Font Package ------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
171 QString fontPKG; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
172 { |
| 14 | 173 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
|
174 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
175 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
176 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
177 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
|
178 _serial.writeByte(0x10); // Font Package |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
179 _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
|
180 if (reply[4] != 0x4D) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
181 LOG_THROW("Bad Font package reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
182 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
183 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
|
184 reply[0], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
185 reply[1], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
186 reply[2], |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
187 reply[3] ? "beta" : ""); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
188 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
189 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
190 //---- OSTC4 specific description ---------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
191 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
|
192 .arg(model()) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
193 .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
|
194 .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
|
195 .arg(mainFW) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
196 .arg(rteFW) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
197 .arg(fontPKG) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
198 .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
|
199 .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
|
200 .trimmed()); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
201 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
202 LOG_INFO("Found " << descriptionString); |
|
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 |
|
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 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
|
208 : fileChecksum(0, 0) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
209 { |
| 4 | 210 emulatorName = "OSTC4/5"; |
| 5 | 211 m_crcWrapper = new CrcWrapper(nullptr); |
| 14 | 212 |
| 213 m_supportedFeatures |= PARAMETERS; | |
| 214 m_supportedFeatures |= DATE; | |
| 215 m_supportedFeatures |= NAME; | |
| 216 m_supportedFeatures |= FIRMWARE; | |
| 217 m_supportedFeatures |= HELIUM_DIVE; | |
| 218 m_supportedFeatures |= CCR_DIVE; | |
| 219 m_supportedFeatures |= BLUETOOTH; | |
| 220 m_supportedFeatures |= VPM_MODEL; | |
| 221 m_supportedFeatures |= SIGNAL_CHECK; | |
| 222 // m_supportedFeatures |= ICON; will be set based on FW version | |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
223 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
224 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
225 ////////////////////////////////////////////////////////////////////////////// |
|
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 void OSTC4Operations::upgradeFW(const QString &fileName) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
228 { |
| 4 | 229 LOG_INFO("Starting OSTC4/5 firmware upgrade..."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
230 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
231 openFirmware(fileName, true); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
232 openFirmware(fileName, false); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
233 |
| 4 | 234 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
|
235 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
236 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
237 #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
|
238 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
|
239 | (((x) & 0xFF000000) >> 24)) |
| 5 | 240 |
| 241 void OSTC4Operations::setIcons(const QString &fileName) | |
| 242 { | |
| 243 int size; | |
| 244 int blockSize; | |
| 245 int transferDelay; | |
| 246 unsigned char echo; | |
| 247 | |
| 248 FirmwareOSTC4 header; | |
| 249 | |
| 250 unsigned char buf3offset[4]; | |
| 251 unsigned char bufVersion[4]; | |
| 252 uint32_t checksum = 0; | |
| 253 uint32_t width = 0; | |
| 254 uint32_t height = 0; | |
| 255 | |
| 256 blockSize = FIRMWARE_BLOCK; | |
| 257 transferDelay = FIRMWARE_BLOCK_DELAY; | |
| 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 try { |
| 5 | 260 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
|
261 } catch (const std::exception &e) { |
| 5 | 262 std::cerr << "Fehler beim Laden: " << e.what() << '\n'; |
| 263 } | |
| 264 | |
| 265 QByteArray bin = bmp->getTransferBytes(); | |
| 266 bmp->getImageXY(&width, &height); | |
| 267 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
268 if (bin.size() < 0x20000 - 12) /* max bin size - header */ |
| 5 | 269 { |
| 270 buf3offset[0] = 0x20; | |
| 271 buf3offset[1] = 0x00; | |
| 272 buf3offset[2] = 0x00; | |
| 273 buf3offset[3] = 0x00; | |
| 274 bufVersion[0] = 1; | |
| 275 bufVersion[1] = 0; | |
| 276 bufVersion[2] = 0; | |
| 277 bufVersion[3] = 0; | |
| 278 | |
| 279 header.type = 0x20; | |
| 280 /* 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
|
281 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
|
282 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
|
283 header.dummy7 = (width >> 8) & 0x0000000F; /* shifted high nibble */ |
| 5 | 284 header.dummy7 |= (height >> 4) & 0x000000F0; /* shifted high nibble */ |
| 285 | |
| 286 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
|
287 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
|
288 + (256 * header.dummy6) + header.dummy7; |
| 5 | 289 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
290 checksum = SWAP4BYTES( |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
291 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
|
292 bin.size() / 4)); |
| 5 | 293 |
| 294 //---- 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
|
295 const int steps = 3 + (bin.size() + blockSize - 1) / blockSize; |
| 5 | 296 int step = 0; |
| 297 PROGRESS(step++, steps); | |
| 298 | |
| 299 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
|
300 writeText(QString("Upload Icon")); |
| 5 | 301 |
| 302 //---- Command | |
| 303 PROGRESS(step++, steps); | |
| 304 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
|
305 if (echo != 'o') |
| 5 | 306 LOG_THROW("Bad OSTC4/5 icon upload."); |
| 307 | |
| 308 //---- Header | |
| 309 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
|
310 _serial.writeBlock((uchar *) &header, sizeof header); |
| 5 | 311 _serial.sleep(500); |
| 312 //---- Data | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
313 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
|
314 if (transferDelay) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
315 _serial.sleep(transferDelay); // 15 msec between 64B blocks... |
| 5 | 316 } |
| 317 PROGRESS(step++, steps); | |
| 318 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
319 size = qMin(blockSize, bin.size() - len); |
| 5 | 320 |
| 321 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
|
322 _serial.writeBlock((uchar *) bin.data() + len, (unsigned int) size); |
| 5 | 323 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
324 _serial.writeBlock((uchar *) &checksum, 4); |
| 5 | 325 PROGRESS(steps, steps); // 100% |
| 326 | |
| 327 //---- Wait acknowledge ---------------------------------------------- | |
| 328 PROGRESS_THROTTLE(); | |
| 329 | |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
330 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
|
331 { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
332 try { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
333 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
|
334 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
|
335 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
336 } catch (const ReadTimeout &) { |
| 5 | 337 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
338 } |
| 5 | 339 |
| 340 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
|
341 } else { |
| 6 | 342 LOG_THROW("Image to large. Must be < 128k."); |
| 5 | 343 } |
| 344 PROGRESS_RESET(); | |
| 345 } | |
| 346 | |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
347 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
348 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
349 /// FIRMWARE UPGRADE /// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
350 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
351 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
352 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
353 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
354 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
355 void OSTC4Operations::openFirmware(const QString &fileName, bool dryRun) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
356 { |
| 4 | 357 LOG_TRACE("Opening OSTC4/5 firmware '" << fileName << "'..."); |
|
1
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 bool forceFirmwareUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
360 bool forceRTEUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
361 bool forceFontlibUpdate; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
362 bool useFastMode; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
363 bool firmwareSupportFastMode = false; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
364 int size; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
365 int blockSize; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
366 int transferDelay; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
367 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
368 // 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
|
369 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
|
370 _file.close(); |
|
1
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 _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
|
373 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
|
374 LOG_THROW("Cannot open BIN file " << fileName); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
375 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
376 // Get settings to overwrite version check |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
377 forceFirmwareUpdate = settings->value("OSTC/forceFirmwareUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
378 forceRTEUpdate = settings->value("OSTC/forceRTEUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
379 forceFontlibUpdate = settings->value("OSTC/forceFontlibUpdate", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
380 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
381 useFastMode = settings->value("OSTC/useFastMode", false).toBool(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
382 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
383 //---- Check consistency ------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
384 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
|
385 for (int part = 1; part < 4; ++part) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
386 // 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
|
387 if ((_file.size() - _file.pos()) < 16) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
388 break; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
389 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
390 if (dryRun) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
391 LOG_TRACE("Checking part " << part << "..."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
392 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
393 FirmwareOSTC4 header; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
394 QByteArray bin; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
395 loadFirmwarePart(header, bin, part, dryRun); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
396 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
397 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
|
398 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
|
399 : 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
|
400 : 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
|
401 : "??? ", |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
402 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
|
403 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
|
404 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
|
405 header.version.beta ? " beta" : ""); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
406 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
407 //---- 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
|
408 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
409 continue; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
410 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
411 //---- 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
|
412 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
413 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
414 if (_connectMode != SERVICE_MODE) |
| 4 | 415 LOG_THROW("Cannot connect OSTC 4/5 service mode..."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
416 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
417 //---- Check if needed ? --------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
418 LOG_TRACE("Check part " << part << " is needed ?"); |
| 4 | 419 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
|
420 if (echo != 'k') |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
421 LOG_THROW("Bad firmware details."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
422 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
423 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
|
424 _serial.writeByte(header.type); // type of firmware part |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
425 _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
|
426 if (reply[4] != 0x4C) // SERVICE MODE only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
427 LOG_THROW("Bad firmware reply."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
428 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
429 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
|
430 && (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
|
431 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
432 firmwareSupportFastMode = true; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
433 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
434 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
435 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
|
436 && 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
|
437 && (!(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
|
438 && (!(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
|
439 && (!(forceFontlibUpdate && header.type == 0x10))) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
440 LOG_INFO(" part " << part << ": " << name << " already up-to-date."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
441 continue; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
442 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
443 if ((useFastMode) && (firmwareSupportFastMode)) /* is fast mode supported ? */ |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
444 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
445 blockSize = FIRMWARE_BLOCK_FAST; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
446 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
|
447 } else { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
448 blockSize = FIRMWARE_BLOCK; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
449 transferDelay = FIRMWARE_BLOCK_DELAY; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
450 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
451 //---- 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
|
452 const int steps = 3 + (bin.size() + blockSize - 1) / blockSize; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
453 int step = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
454 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
455 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
456 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
|
457 writeText(QString("Upload Part %1").arg(part)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
458 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
459 //---- Command |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
460 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
461 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
|
462 if (echo != 's') |
| 4 | 463 LOG_THROW("Bad OSTC4/5 FW upgrade commande."); |
|
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 //---- Header |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
466 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
|
467 _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
|
468 _serial.sleep(500); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
469 //---- Data |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
470 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
|
471 if (transferDelay) { |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
472 _serial.sleep(transferDelay); // 15 msec between 64B blocks... |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
473 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
474 PROGRESS(step++, steps); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
475 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
476 size = qMin(blockSize, bin.size() - len); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
477 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
478 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
|
479 _serial.writeBlock((uchar *) bin.data() + len, (unsigned int) size); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
480 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
481 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
482 PROGRESS(steps, steps); // 100% |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
483 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
484 //---- Wait acknowledge ---------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
485 // 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
|
486 if (header.type != 0xFE) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
487 PROGRESS_THROTTLE(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
488 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
489 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
|
490 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
491 try { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
492 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
|
493 if (reply == 0x4C) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
494 break; |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
495 } catch (const ReadTimeout &) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
496 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
497 } |
|
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 LOG_INFO(" part " << part << ": " << name << " uploaded."); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
503 //---- Done -------------------------------------------------------------- |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
504 // 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
|
505 if (!dryRun) { |
|
3
4ace58a7c03c
Send disconnect command before closing the connection
Ideenmodellierer
parents:
1
diff
changeset
|
506 disconnect(true); |
|
1
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
509 PROGRESS_RESET(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
510 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
511 //---- 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
|
512 if (dryRun) { |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
513 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
|
514 if (4 != _file.read((char *) &expected, sizeof expected)) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
515 LOG_THROW("Missing file checksum."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
516 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
517 uint checksum = fileChecksum.a() | (fileChecksum.b() << 16); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
518 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
519 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
|
520 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
|
521 expected, |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
522 checksum)); |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
523 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
|
524 LOG_TRACE(QString::asprintf("File checksum = %04X (OK)", checksum)); |
|
1
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 if (!_file.atEnd()) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
527 LOG_THROW("Extra data after last block."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
528 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
529 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
530 _file.close(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
531 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
532 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
533 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
534 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
535 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
|
536 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
537 memset(&header, 0, sizeof header); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
538 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
539 //---- 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
|
540 if (sizeof header != _file.read((char *) &header, sizeof header)) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
541 LOG_THROW("EOF in header."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
542 fileChecksum.add(&header, sizeof header); |
|
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 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
|
545 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
|
546 LOG_THROW( |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
547 QString::asprintf("Inconsistent header (%04X != %04X).", checksum, header.checksum)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
548 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
549 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
|
550 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
|
551 << ")."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
552 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
553 if (dryRun) |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
554 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
|
555 case 0x10: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
556 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
|
557 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
558 case 0xFF: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
559 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
|
560 break; |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
561 case 0xFE: |
|
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
562 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
|
563 break; |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
564 default: |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
565 // 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
|
566 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
|
567 << 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
|
568 << ")."); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
569 break; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
570 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
571 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
572 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
573 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
|
574 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
|
575 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
|
576 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
|
577 header.version.beta ? " beta" : "")); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
578 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
579 //---- 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
|
580 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
581 LOG_TRACE("... size " << SWAP4BYTES(header.length) << " bytes."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
582 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
|
583 assert((uint) bin.size() == SWAP4BYTES(header.length) + 4); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
584 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
585 if (bin.size() != _file.read(bin.data(), bin.size())) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
586 LOG_THROW("EOF in data."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
587 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
588 if (dryRun) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
589 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
|
590 *(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
|
591 + SWAP4BYTES(header.length)))); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
592 fileChecksum.add(bin); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
595 void OSTC4Operations::getSignal() |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
596 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
597 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
598 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
599 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
|
600 if (echo != 0x6C) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
601 LOG_THROW("Bad text reply (1)" << echo); |
|
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 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
604 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
605 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
|
606 if (ok != 0x4D) // DOWNLOAD mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
607 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
608 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
609 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
610 void OSTC4Operations::getAllHeader(unsigned char *pBuffer) |
|
1
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 index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
613 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
614 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
615 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
616 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
617 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
618 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
619 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
620 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
621 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
|
622 if (echo != 0x85) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
623 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
624 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
625 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
626 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
627 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
|
628 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
629 _serial.readBlock(pBuffer + (index * 0x8000), 0x8000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
630 LOG_INFO((".")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
631 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
632 *(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
|
633 LOG_INFO(QString::asprintf("%d", *(pBuffer + (index * 0x8000)))); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
634 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
|
635 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
636 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
637 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
638 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
639 void OSTC4Operations::writeAllHeader(unsigned char *pBuffer) |
|
1
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 index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
642 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
643 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
644 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
645 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
646 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
647 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
648 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
649 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
650 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
|
651 if (echo != 0x86) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
652 LOG_THROW("Bad text reply (1)" << echo); |
|
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 _serial.sleep(1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
655 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
656 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
|
657 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
658 _serial.writeBlock(pBuffer + (index * 0x8000), 0x8000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
659 LOG_INFO((".")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
660 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
661 _serial.writeByte(*(pBuffer + (index * 0x8000))); // write lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
662 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
663 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
|
664 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
665 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
666 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
667 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
668 void OSTC4Operations::getAllSamples(unsigned char *pBuffer) |
|
1
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 short index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
671 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
672 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
673 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
674 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
675 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
676 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
677 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
678 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
679 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
|
680 if (echo != 0x88) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
681 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
682 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
683 _serial.sleep(500); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
684 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
685 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
|
686 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
687 _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
|
688 LOG_INFO(QString::asprintf("%d", index)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
689 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
690 _serial.readBlock(pBuffer + (index * 0x8000), 4); // get lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
691 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
|
692 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
693 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
694 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
695 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
696 void OSTC4Operations::writeAllSamples(unsigned char *pBuffer) |
|
1
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 short index = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
699 char buffer[60]; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
700 memset(buffer, 0, sizeof buffer); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
701 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
702 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
703 connectServiceMode(); |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
704 if (_connectMode != SERVICE_MODE) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
705 LOG_THROW("Cannot connect OSTC4 service mode..."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
706 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
707 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
|
708 if (echo != 0x89) |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
709 LOG_THROW("Bad text reply (1)" << echo); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
710 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
711 _serial.sleep(500); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
712 |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
713 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
|
714 { |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
715 _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
|
716 LOG_INFO(QString::asprintf("%d", index)); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
717 } |
|
12
ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
Ideenmodellierer
parents:
6
diff
changeset
|
718 _serial.writeBlock(pBuffer + (index * 0x8000), 4); // set lastdiveID |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
719 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
|
720 if (ok != 0x4C) //Service mode only. |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
721 LOG_THROW("Bad clock reply (2)"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
722 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
723 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
724 ////////////////////////////////////////////////////////////////////////////// |
