annotate HardwareOperations.cpp @ 1:0b3630a29ad8

Initial version based on previous repository. Project was ported to QT6 and in now cmake based.
author Ideenmodellierer <tiefenrauscher@web.de>
date Thu, 27 Nov 2025 18:40:28 +0100
parents
children e30f00f760d3
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 HardwareOperations.cpp
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
3 /// \brief Abstract operations for HW dive computers.
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.cpp
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
6 ///
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
7 /// \copyright (c) 2011-2016 JD Gascuel. All rights reserved.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
8 /// $Id$
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
9 ///////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
10 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
11 // BSD 2-Clause License:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
12 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
13 // Redistribution and use in source and binary forms, with or without
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
14 // modification, are permitted provided that the following conditions
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
15 // are met:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
16 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
17 // 1. Redistributions of source code must retain the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
18 // this list of conditions and the following disclaimer.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
19 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
20 // 2. Redistributions in binary form must reproduce the above copyright notice,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
21 // this list of conditions and the following disclaimer in the documentation
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
22 // and/or other materials provided with the distribution.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
23 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
25 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
26 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
27 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
28 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
29 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
30 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
31 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
32 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
33 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
34 // THE POSSIBILITY OF SUCH DAMAGE.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
35 //
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
36 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
37
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
38 #include "HardwareOperations.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
39 #include "MainWindow.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
40 #include "Utils/Log.h"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
41 #include <QSerialPortInfo>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
42
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
43 #ifdef WIN32
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
44 # include <winreg.h>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
45 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
46
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
47 #include <QDir>
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
48
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
49 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
50
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
51 unsigned char HardwareOperations::retryCommand(Serial& serial,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
52 unsigned char cmd,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
53 int retries)
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 for(int retry=0; retry<retries; ++retry)
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 serial.writeByte( cmd ); // Send command
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
58 serial.sleep(25); // Allow 25msec lag.
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 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
61 unsigned char echo = serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
62 if( echo == cmd || echo == 'M' || echo == 'L' )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
63 return echo; // Got it, or unknown command...
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 catch(const ReadTimeout&) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
66 continue;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
67 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
68
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
69 serial.sleep(100); // Cleanup any pending stuff,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
70 serial.purge(); // and retry...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
71 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
72
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
73 return 0xFF;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
74 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
75
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
76 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
77
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
78 HardwareOperations::HardwareDescriptor
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
79 HardwareOperations::hardwareDescriptor()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
80 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
81 unsigned char echo = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
82 unsigned int hardFeatures = 0xFF; // timeout response...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
83 unsigned int softFeatures = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
84 unsigned int model = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
85 unsigned char ok = 0;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
86
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
87 try {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
88 //---- First: try the new extended hardware query --------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
89 echo = retryCommand(_serial, 0x60, 1); // BACKQUOTE char
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
90 if( echo == 0x60 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
91 uchar extendedDescriptor[6];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
92 _serial.readBlock(extendedDescriptor, sizeof extendedDescriptor);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
93
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
94
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
95 hardFeatures = extendedDescriptor[0] * 256 + extendedDescriptor[1];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
96 softFeatures = extendedDescriptor[2] * 256 + extendedDescriptor[3];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
97 model = extendedDescriptor[4];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
98 ok = extendedDescriptor[5];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
99 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
100 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
101 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
102 // Did we have a timeout ?
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
103 // In that case, some hwOS versions fails and need a reset of
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
104 // the connection mode...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
105 if( echo == 0xFF )
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 echo = retryCommand(_serial, 0xBB); // Try to reconnect
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
108 if( echo == 0xBB )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
109 echo = _serial.readByte(); // Eat 4d prompt
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
110 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
111
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
112 // Then try the OLD hardware descriptor command...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
113 echo = retryCommand(_serial, 'j'); // 0x6A
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
114 if( echo == 'j' ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
115 hardFeatures = _serial.readByte();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
116 ok = _serial.readByte();
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 catch(const ReadTimeout&) {}
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 if( (echo != 0x60 && echo != 'j')
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
123 || (ok != 'M' && ok != 'L')
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
124 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
125 LOG_TRACE("Old OSTC not responding...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
126 return HW_UNKNOWN_OSTC;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
127 }
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 switch(hardFeatures) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
130 case HW_Frog : LOG_TRACE("Frog found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
131 case HW_OSTCSport_a : LOG_TRACE("OSTC Sport found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
132 case HW_OSTC2c : LOG_TRACE("OSTC 2c found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
133 case HW_OSTC2_a:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
134 case HW_OSTC2_c : LOG_TRACE("OSTC 2 found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
135 case HW_OSTCcR_a:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
136 case HW_OSTCcR_b : LOG_TRACE("OSTC cR found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
137 case HW_OSTC3 : LOG_TRACE("OSTC 3 found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
138 case HW_OSTC3p_a : LOG_TRACE("OSTC 3+ found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
139 case HW_OSTC4 : LOG_TRACE("OSTC 4 found"); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
140
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
141 case HW_OSTCSport_b : LOG_TRACE("OSTC Sport, OSTC 2 or OSTC 3 found."); break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
142
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
143 case 0xFF: case 0x4C: case 0x4D:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
144 LOG_TRACE("old OSTC not responding...");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
145 return HW_UNKNOWN_OSTC;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
146
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
147 default:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
148 // LOG_TRACE("Unknown hardware feature =" << QString().sprintf("0x%04x", hardFeatures));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
149 LOG_TRACE("Unknown hardware feature =" << QString::asprintf("0x%04x", hardFeatures));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
150 break;
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
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
153 if( echo == 0x60 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
154 LOG_TRACE(" software feature = " << QString::asprintf("0x%04x", softFeatures));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
155 LOG_TRACE(" model = " << QString::asprintf("0x%02x", model));
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
156 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
157
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
158 return (HardwareDescriptor)hardFeatures;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
159 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
160
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
161 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
162
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
163 QStringList HardwareOperations::listBluetoothPorts() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
164 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
165 assert(supported() & BLUETOOTH);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
166 QStringList list;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
167 QString PortDesc;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
168 const auto serialPortInfos = QSerialPortInfo::availablePorts();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
169
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
170 #if defined(Q_OS_MAC) || defined(Q_OS_LINUX)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
171 // TODO: Linux USB search...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
172 QRegExp pTemplate = portTemplate();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
173 QDir dev("/dev");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
174 QStringList all = dev.entryList(QStringList() << "tty.*",
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
175 QDir::NoDotAndDotDot|QDir::System|QDir::Writable,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
176 QDir::Name);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
177
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
178 for(int i=0; i<(int)all.count(); ++i) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
179 if( pTemplate.indexIn(all[i]) >= 0 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
180 LOG_TRACE("Port " << all[i]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
181 list += all[i];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
182 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
183 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
184 LOG_DEBUG("... " << all[i]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
185 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
186 #else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
187 /* Check the descriptors of the available COMs for Bluetooth tag */
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
188 for (const QSerialPortInfo &serialPortInfo : serialPortInfos) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
189 PortDesc = serialPortInfo.description();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
190 if( PortDesc.contains("Bluetooth"))
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
191 list += serialPortInfo.portName();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
192 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
193
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
194 if( list.isEmpty() ) /* no port identified => fallback to old detection function */
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
195 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
196 for(int i=1; i<300; ++i)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
197 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
198 QString port = QString("COM%1").arg(i);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
199
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
200 // First: try to read default configuration...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
201 COMMCONFIG config = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
202 config.dwSize = sizeof config;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
203 config.wVersion = 1;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
204 DWORD len = sizeof config;
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 QByteArray fixed = "\\\\.\\" + port.toLocal8Bit();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
207 if( GetDefaultCommConfigA(fixed.constData(), &config, &len) ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
208 if( config.dwProviderSubType == PST_RS232 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
209 list += port;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
210 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
211 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
212
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
213 //---- Second chance
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
214 // overide usual MS bug, by looking into the registry for more
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
215 // BLUETOOTH ports...
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 HKEY key;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
218 const char registryPath[] = "HARDWARE\\DEVICEMAP\\SERIALCOMM";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
219 if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, // PWD
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
220 registryPath, // "SOFTWARE\Intel\PSIB"
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
221 0, // Options
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
222 KEY_READ, // Desired SAM: See 32bits view.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
223 &key) == ERROR_SUCCESS
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
224 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
225 for(DWORD i = 0; ++i;) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
226 char nameBuffer[128] = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
227 DWORD nameLen = sizeof nameBuffer;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
228 unsigned char dataBuffer[128] = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
229 DWORD dataLen = sizeof dataBuffer;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
230 long rc = RegEnumValueA(key, i,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
231 nameBuffer, &nameLen,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
232 nullptr,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
233 nullptr,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
234 dataBuffer, &dataLen);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
235 if( rc != ERROR_SUCCESS )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
236 break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
237
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
238 QString name = QString(nameBuffer);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
239 QString port = QString((char*)dataBuffer);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
240 LOG_TRACE("Resource " << i << ": " << name << ", " << port);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
241 if( name.contains("\\BtModem") || name.contains("\\BthModem") || name.contains("\\BtPort") ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
242 list += port + " (Bluetooth)";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
243 LOG_TRACE("Port " << name);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
244 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
245 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
246 LOG_DEBUG("... " << name);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
247 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
248 RegCloseKey(key);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
249 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
250 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
251 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
252 #endif
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
253
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
254 return list;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
255 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
256
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
257 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
258
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
259 QStringList HardwareOperations::listUSBPorts() const
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
260 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
261 assert( !(supported() & BLUETOOTH) );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
262 QStringList list;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
263
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
264 #if defined(Q_OS_MAC) || defined(Q_OS_LINUX)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
265 // TODO: Linux USB search...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
266 QDir dev("/dev");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
267 QRegExp pTemplate = portTemplate();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
268 QStringList all = dev.entryList(QStringList() << "tty.*",
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
269 QDir::System|QDir::Writable|QDir::NoDotAndDotDot,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
270 QDir::Name);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
271 for(int i=0; i<(int)all.count(); ++i) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
272 if( pTemplate.indexIn(all[i]) >= 0 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
273 LOG_TRACE("Port " << all[i]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
274 list += all[i];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
275 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
276 else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
277 LOG_TRACE("... " << all[i]);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
278 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
279 #else
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
280 //---- First chance: Try the normal port list:
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
281 for(int i=1; i<300; ++i)
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
282 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
283 QString port = QString("COM%1").arg(i);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
284
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
285 // First: try to read default configuration...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
286 COMMCONFIG config;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
287 memset(&config, 0, sizeof config);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
288 config.dwSize = sizeof config;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
289 config.wVersion = 1;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
290 DWORD len = sizeof config;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
291
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
292 QByteArray fixed = "\\\\.\\" + port.toLocal8Bit();
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
293 if( GetDefaultCommConfigA(fixed.constData(), &config, &len) ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
294 LOG_TRACE("Port " << port << " subtype=" << int(config.dwProviderSubType) );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
295 if( config.dwProviderSubType == PST_RS232 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
296 list += port;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
297 } else if( len != sizeof config )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
298 LOG_THROW("Required " << len << " bytes.");
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
299 else if( HRESULT rc = GetLastError() )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
300 if( rc != 87 )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
301 LOG_TRACE("Port " << port << " error=" << rc );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
302
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
303 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
304 //---- Second chance
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
305 // overide usual MS bug, by looking into the registry for more
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
306 // USB serial ports...
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
307 {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
308 HKEY key;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
309 const char registryPath[] = "HARDWARE\\DEVICEMAP\\SERIALCOMM";
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
310 if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, // PWD
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
311 registryPath, // path
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
312 0, // Options
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
313 KEY_READ, // Desired SAM: See 32bits view.
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
314 &key) == ERROR_SUCCESS
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
315 ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
316 for(DWORD i = 0;; ++i) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
317 char nameBuffer[128] = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
318 DWORD nameLen = sizeof nameBuffer;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
319 unsigned char dataBuffer[128] = {0};
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
320 DWORD dataLen = sizeof dataBuffer;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
321 long rc = RegEnumValueA(key, i,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
322 nameBuffer, &nameLen,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
323 nullptr,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
324 nullptr,
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
325 dataBuffer, &dataLen);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
326
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
327 if( rc == ERROR_NO_MORE_ITEMS )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
328 break;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
329
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
330 if( rc != ERROR_SUCCESS )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
331 LOG_THROW( "Enumeration error" );
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
332
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
333 QString name = QString(nameBuffer);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
334 QString port = QString((char*)dataBuffer);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
335 LOG_TRACE("Resource " << i << ": " << name << ", " << port);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
336
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
337 if( name.contains("\\VCP") )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
338 list += port + " (USB)";
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 RegCloseKey(key);
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 #endif
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 return list;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
346 }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
347
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
348 //////////////////////////////////////////////////////////////////////////////
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
349
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
350 //QString HardwareOperations::scanNewPort()
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
351 //{
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
352 // static QStringList oldPorts;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
353
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
354 // //---- Get current ports, type-less (ie. strip (USB) or (Bluetooth) ------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
355 // QStringList newPorts;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
356 // foreach(QString port, listPorts())
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
357 // newPorts += port.section(" ", 0, 0);
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 // //---- Simplify all ports not in the list anymore -----------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
360 // for(int p=0; p<oldPorts.count(); ++p) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
361 // QString port = oldPorts[p];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
362 // if( ! newPorts.contains(port) )
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
363 // oldPorts.removeAll(port);
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
364 // }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
365
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
366 // //---- Check for new port in the list -----------------------------------
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
367 // for(int p=0; p<newPorts.count(); ++p) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
368 // QString port = newPorts[p];
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
369 // // Did we find a new port ?
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
370 // if( ! oldPorts.contains(port) ) {
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
371 // oldPorts += port;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
372 // return port;
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 // }
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
375
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
376 // return QString::null;
0b3630a29ad8 Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff changeset
377 //}