Mercurial > public > ostc_companion
annotate Serial.cpp @ 4:e30f00f760d3 default tip
Cleanup OSTC label and removed url
The computer type will now show OSTC 4/5 instead of only 4. The url has
been removed because it is no longer maintained. The ui header have been
deleted because they are generated files shich should not be under
version controll. Delete locally if you want to force an update of the
dialog layout.
| author | Ideenmodellierer |
|---|---|
| date | Sun, 30 Nov 2025 18:37:32 +0100 |
| parents | 177f640940f2 |
| children |
| rev | line source |
|---|---|
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
1 ////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
2 /// \file Serial.cpp |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
3 /// \brief RS232 serial i/o. |
|
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 /// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
6 /// \copyright (c) 2011-2016 JD Gascuel. All rights reserved. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
7 /// $Id$ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
8 ////////////////////////////////////////////////////////////////////////////// |
|
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 // BSD 2-Clause License: |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
11 // |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
12 // 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
|
13 // modification, are permitted provided that the following conditions |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
14 // are met: |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
15 // |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
16 // 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
|
17 // this list of conditions and the following disclaimer. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
18 // |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
19 // 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
|
20 // 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
|
21 // and/or other materials provided with the distribution. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
22 // |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
23 // 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
|
24 // 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
|
25 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
26 // 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
|
27 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
28 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
29 // 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
|
30 // 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
|
31 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
32 // 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
|
33 // THE POSSIBILITY OF SUCH DAMAGE. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
34 // |
|
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 #include "Serial.h" |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
38 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
39 #include "Utils/Log.h" |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
40 #include "Utils/Exception.h" |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
41 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
42 #include <QString> |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
43 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
44 #ifdef WIN32 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
45 # define S_WRITE(p, b, li, lo) WriteFile(p, b, li, &lo, NULL) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
46 # define S_READ(p, b, li, lo) ReadFile(p, b, li, &lo, NULL) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
47 # define S_LEN DWORD |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
48 # define S_FLUSH(p) FlushFileBuffers(p) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
49 # define S_PURGE(p) PurgeComm(p, PURGE_RXCLEAR | PURGE_TXCLEAR) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
50 # define S_CLOSE(p) CloseHandle(p) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
51 #else |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
52 # include <fcntl.h> |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
53 # include <termios.h> |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
54 # include <sys/ioctl.h> |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
55 # include <unistd.h> |
|
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 # define INVALID_HANDLE_VALUE (-1) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
58 # define S_WRITE(p, b, li, lo) (lo = write(p, b, li)) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
59 # define S_READ(p, b, li, lo) (lo = read (p, b, li)) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
60 # define S_LEN ssize_t |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
61 # define S_FLUSH(p) tcdrain(p) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
62 # define S_PURGE(p) tcflush(p,TCIOFLUSH) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
63 # define S_CLOSE(p) ::close(p) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
64 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
65 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
66 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
67 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
68 Serial::~Serial() |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
69 {} |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
70 |
|
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 void Serial::open(const QString& port, const QString &type) |
|
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 if( _isOpen ) return; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
76 LOG_TRACE("Open " << port << " ..."); |
|
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 _hSerial = INVALID_HANDLE_VALUE; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
79 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
80 //------------------------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
81 // Sanity checks. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
82 if( port.isEmpty() ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
83 LOG_THROW( "Port is not defined." ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
84 if( type.isEmpty() ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
85 LOG_THROW( "Port type is not defined." ); |
|
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 bool usbMode = type.contains("ostc2c", Qt::CaseInsensitive) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
88 || ( type.contains("ostc3", Qt::CaseInsensitive) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
89 && !type.contains("ostc3p", Qt::CaseInsensitive)) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
90 || type.contains("ostc_cr", Qt::CaseInsensitive); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
91 LOG_TRACE((usbMode ? "Fast USB" : "Slow Bluetooth") << " connection mode."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
92 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
93 //------------------------------------------------------------------------ |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
94 #ifdef Q_OS_WIN |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
95 // BUGFIX: COM ports above COM9 are not automatically recognized, |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
96 // hence we have to prepend DEVICE NAMESPACE... |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
97 // http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
98 QByteArray com = port.toLatin1() + "\0"; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
99 if( !com.startsWith("\\\\.\\") ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
100 com = "\\\\.\\" + com; |
|
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 _hSerial = CreateFileA(com.data(), |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
103 GENERIC_READ | GENERIC_WRITE, |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
104 0, // Exclusive access. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
105 NULL, // No security |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
106 OPEN_EXISTING, |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
107 FILE_ATTRIBUTE_DEVICE | FILE_FLAG_NO_BUFFERING, |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
108 0); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
109 if(_hSerial==INVALID_HANDLE_VALUE) |
|
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 if(GetLastError()==ERROR_FILE_NOT_FOUND) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
112 LOG_THROW( "Unknown port" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
113 LOG_THROW( "Unable to open port" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
114 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
115 S_PURGE(_hSerial); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
116 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
117 DCB dcbSerial = {sizeof(dcbSerial), 0}; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
118 if( !GetCommState(_hSerial, &dcbSerial) ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
119 LOG_THROW( "Unable to get COM port config" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
120 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
121 dcbSerial.BaudRate = CBR_115200; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
122 dcbSerial.ByteSize = 8; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
123 dcbSerial.Parity = NOPARITY; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
124 dcbSerial.StopBits = ONESTOPBIT; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
125 dcbSerial.fOutxCtsFlow = DTR_CONTROL_ENABLE; // NO HARDWARE FLOW CONTROL |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
126 dcbSerial.fRtsControl = RTS_CONTROL_ENABLE; //RTS_CONTROL_DISABLE; // NO HARDWARE FLOW CONTROL |
|
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 if( !SetCommState(_hSerial, &dcbSerial) ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
129 LOG_THROW( "Unable to set COM port config" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
130 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
131 COMMTIMEOUTS timeouts={0}; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
132 if( usbMode ) { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
133 timeouts.ReadTotalTimeoutConstant = 500; // 0.5 sec |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
134 timeouts.WriteTotalTimeoutConstant = 1000; // 1.0 sec |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
135 } else { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
136 timeouts.ReadTotalTimeoutConstant = 2000; // 2.0 sec timeout. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
137 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
138 if( !SetCommTimeouts(_hSerial, &timeouts) ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
139 LOG_THROW( "Unable to configure port" ); |
|
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 LOG_TRACE("Connection:"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
142 LOG_TRACE(" " << dcbSerial.BaudRate << " bauds."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
143 LOG_TRACE(" " << (int)dcbSerial.ByteSize << " bits, " |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
144 << (dcbSerial.Parity ? "+parity, " : "no parity, ") |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
145 << (dcbSerial.StopBits ? QString(" +%1").arg(dcbSerial.StopBits) : QString("no")) << " stops bits."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
146 LOG_TRACE(" CTS is " << (dcbSerial.fOutxCtsFlow ? "ON." : "OFF.")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
147 LOG_TRACE(" RTS is " << ((dcbSerial.fRtsControl == RTS_CONTROL_HANDSHAKE) ? "ON." |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
148 : (dcbSerial.fRtsControl == RTS_CONTROL_ENABLE) ? "FORCED." |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
149 : "OFF.")); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
150 LOG_TRACE(" Read timeout " << timeouts.ReadTotalTimeoutConstant << " msec."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
151 LOG_TRACE(" Write timeout " << timeouts.WriteTotalTimeoutConstant << " msec."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
152 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
153 |
|
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 #if defined(Q_OS_MAC) || defined(Q_OS_LINUX) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
156 QByteArray p = port.toLatin1(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
157 if( ! p.startsWith("/dev/") ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
158 p = "/dev/" + p; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
159 _hSerial = ::open( p.constData(), O_RDWR | O_NOCTTY | O_NONBLOCK, 0); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
160 if( _hSerial<0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
161 LOG_THROW( "Unable to open port " << p); |
|
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 if( ioctl(_hSerial, TIOCEXCL) < 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
164 LOG_THROW( "Port in use" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
165 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
166 // Once opened, clearing the O_NONBLOCK flag. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
167 if( fcntl(_hSerial, F_SETFL, 0) < 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
168 LOG_THROW( "Can't reset non-blocking I/O" ); |
|
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 struct termios termios; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
171 tcgetattr(_hSerial, &termios); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
172 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
173 cfmakeraw(&termios); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
174 if( cfsetspeed(&termios, B115200) < 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
175 LOG_THROW( "Bad port speed" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
176 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
177 termios.c_cflag |= CLOCAL| CS8 | CREAD; // No DTR/DSR/DCD, 8bit. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
178 termios.c_cflag &= ~( PARENB | CSTOPB // No parity, one stop bit. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
179 | CCTS_OFLOW | CRTS_IFLOW); // No hardware flow control. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
180 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
181 if( usbMode ) { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
182 // FAST USB: Fix timeout to 0.5 seconde: |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
183 termios.c_cc[VMIN] = 0; // Pure timout mode (no char needed). |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
184 termios.c_cc[VTIME] = 5; // 0.5s timeout after last received byte. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
185 } else { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
186 // SLOW BLUETOOTH: Fix timeout to 2.0 sec: |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
187 termios.c_cc[VMIN] = 0; // Pure timout mode (no char needed). |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
188 termios.c_cc[VTIME] = 20; // 2.0sec timeout after last received byte. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
189 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
190 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
191 if( tcsetattr(_hSerial, TCSANOW, &termios) < 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
192 LOG_THROW( "Unable to configure port" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
193 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
194 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
195 if( _hSerial == INVALID_HANDLE_VALUE ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
196 LOG_THROW( "Port not open" ); |
|
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 _isOpen = true; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
199 LOG_TRACE("Device open successfull."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
200 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
201 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
202 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
203 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
204 void Serial::close() |
|
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 if( !_isOpen ) return; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
207 LOG_TRACE("Device close ..."); |
|
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 #ifdef Q_OS_MAC |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
210 if( ioctl(_hSerial, TIOCNXCL) < 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
211 LOG_THROW( "Port in use" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
212 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
213 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
214 if( _hSerial == INVALID_HANDLE_VALUE ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
215 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
216 S_CLOSE(_hSerial); |
|
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 _hSerial = INVALID_HANDLE_VALUE; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
219 _isOpen = false; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
220 LOG_TRACE("Device close successfull."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
221 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
222 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
223 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
224 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
225 unsigned char Serial::readByte() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
226 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
227 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
228 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
229 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
230 unsigned char byte = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
231 S_LEN len = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
232 S_READ(_hSerial, &byte, 1, len); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
233 if( len != 1 ) |
|
2
177f640940f2
Update exception class and cleanup redifinitions
Ideenmodellierer
parents:
1
diff
changeset
|
234 LOG_THROW_E(ReadTimeout, "< timeout" ); |
|
1
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
235 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
236 if( isprint(byte) ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
237 LOG_DEBUG("< " << QString::asprintf("%02x '%c'", byte, byte)); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
238 else |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
239 LOG_DEBUG("< " << QString::asprintf("%02x", byte) ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
240 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
241 return byte; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
242 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
243 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
244 void Serial::writeByte(unsigned char byte) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
245 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
246 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
247 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
248 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
249 if( isprint(byte) ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
250 LOG_DEBUG("> " << QString::asprintf("%02x '%c'", byte, byte) ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
251 else |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
252 LOG_DEBUG("> " << QString::asprintf("%02x", byte) ); |
|
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 S_LEN len = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
255 S_WRITE(_hSerial, &byte, 1, len); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
256 if( len != 1 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
257 // LOG_THROW_E(WriteTimeout, "> timeout"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
258 LOG_THROW("> timeout"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
259 } |
|
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 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
262 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
263 unsigned short Serial::readShort() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
264 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
265 unsigned char lo = readByte(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
266 unsigned char hi = readByte(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
267 return hi << 8 | lo; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
268 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
269 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
270 void Serial::writeShort(unsigned short word) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
271 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
272 unsigned char lo = word & 0xFF; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
273 unsigned char hi = word >> 8; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
274 writeByte(lo); writeByte(hi); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
277 /////////////////////////////////////////////////////////////////////////////// |
|
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 void Serial::writeInt24(unsigned int int24) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
280 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
281 unsigned char lo = int24 & 0xFF; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
282 unsigned char hi = (int24 >> 8) & 0xFF; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
283 unsigned char up = (int24 >> 16) & 0xFF; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
284 writeByte(lo); writeByte(hi); writeByte(up); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
285 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
286 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
287 unsigned int Serial::readInt24() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
288 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
289 unsigned char lo = readByte(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
290 unsigned char hi = readByte(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
291 unsigned char up = readByte(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
292 return up << 16 | hi << 8 | lo; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
293 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
294 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
295 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
296 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
297 unsigned int Serial::readBlock(unsigned char* ptr, unsigned int size) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
298 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
299 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
300 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
301 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
302 unsigned int bytes = 0; |
|
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 bool timeout = false; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
305 while( size > 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
306 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
307 // Allow up to 1.0sec for each 4K block. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
308 S_LEN todo = (size > 4096) ? 4096 : size; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
309 S_LEN done = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
310 S_READ(_hSerial, ptr+bytes, todo, done); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
311 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
312 if( done == 0 ) { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
313 timeout = true; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
314 break; |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
317 size -= done; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
318 bytes += (unsigned int)done; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
319 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
320 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
321 if( Log::minLevel <= Log::LEVEL_DEBUG ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
322 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
323 const int DUMP_LINE = 16; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
324 const int DUMP_MAX = 3*DUMP_LINE; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
325 const unsigned int length = (bytes < DUMP_MAX) ? bytes : DUMP_MAX; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
326 for(unsigned int i=0; i<length; i += DUMP_LINE) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
327 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
328 LogAction logger(Log::LEVEL_DEBUG, __FILE__ ,__LINE__, "readBlock()"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
329 logger << "< "; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
330 for(unsigned int j=i; j<bytes && j<(i+DUMP_LINE); ++j) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
331 logger << QString::asprintf("%02x ", ptr[j]); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
332 for(unsigned int j=i; j<bytes && j<(i+DUMP_LINE); ++j) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
333 logger << (isprint( ptr[j] ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
334 ? ptr[j] |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
335 : (unsigned char)'.'); |
|
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( length < bytes ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
338 LOG_DEBUG("< ... " << (bytes-length) << " more bytes."); |
|
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 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
341 if( timeout ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
342 LOG_THROW_E(ReadTimeout, "< block timeout (missing " << size << " bytes)"); |
|
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 return bytes; |
|
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 |
|
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 void Serial::writeBlock(const unsigned char* ptr, unsigned int size) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
350 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
351 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
352 LOG_THROW( "Port not open" ); |
|
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 if( Log::minLevel <= Log::LEVEL_DEBUG ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
355 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
356 const int DUMP_LINE = 16; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
357 const int DUMP_MAX = 3*DUMP_LINE; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
358 const unsigned int length = (size < DUMP_MAX) ? size : DUMP_MAX; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
359 for(unsigned int i=0; i<length; i += DUMP_LINE) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
360 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
361 LogAction logger(Log::LEVEL_DEBUG, __FILE__ ,__LINE__, "writeBlock()"); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
362 logger << "> "; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
363 for(unsigned int j=i; j<size && j<(i+DUMP_LINE); ++j) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
364 logger << QString::asprintf("%02x ", ptr[j]); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
365 for(unsigned int j=i; j<size && j<(i+DUMP_LINE); ++j) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
366 logger << (isprint( ptr[j] ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
367 ? ptr[j] |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
368 : (unsigned char)'.'); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
369 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
370 if( length < size ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
371 LOG_DEBUG("> ... " << (size-length) << " more bytes."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
372 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
373 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
374 while( size > 0 ) |
|
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 // Allow up to 1.0sec for each 4K block. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
377 S_LEN chunck = (size > 4096) ? 4096 : size; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
378 S_LEN len = 0; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
379 S_WRITE(_hSerial, ptr, chunck, len); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
380 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
381 if( len == 0 ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
382 LOG_THROW_E(WriteTimeout, "> block timeout"); |
|
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 size -= len; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
385 ptr += len; |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
386 } |
|
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 // Auto-fluh on each write. |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
389 flush(); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
390 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
391 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
392 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
393 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
394 void Serial::purge() |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
395 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
396 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
397 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
398 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
399 // Empty incomming buffer |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
400 S_PURGE(_hSerial); |
|
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 LOG_TRACE("Device purged."); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
403 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
404 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
405 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
406 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
407 void Serial::flush() const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
408 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
409 if( !_isOpen ) |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
410 LOG_THROW( "Port not open" ); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
411 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
412 S_FLUSH(_hSerial); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
413 } |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
414 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
415 /////////////////////////////////////////////////////////////////////////////// |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
416 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
417 void Serial::sleep(int msec) const |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
418 { |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
419 #ifdef WIN32 |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
420 Sleep(msec); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
421 #else |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
422 usleep(msec*1000); |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
423 #endif |
|
0b3630a29ad8
Initial version based on previous repository.
Ideenmodellierer <tiefenrauscher@web.de>
parents:
diff
changeset
|
424 } |
