annotate OSTC4Operations.cpp @ 12:ac837fe1d590 default tip

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