Main Page
Related Pages
Namespaces
Namespace List
Namespace Members
All
b
c
d
e
f
i
m
n
o
p
s
t
v
w
Functions
Variables
Typedefs
Enumerations
Enumerator
b
c
f
i
m
o
s
t
v
w
Classes
Class List
Class Hierarchy
Class Members
All
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
x
y
~
Functions
a
c
d
e
f
g
i
n
o
p
r
s
u
v
~
Variables
a
b
c
d
e
f
h
i
m
n
p
r
s
t
v
w
x
y
Typedefs
Enumerations
Enumerator
Files
File List
File Members
All
a
b
c
g
m
s
t
Functions
m
t
Macros
src
serial_query.cpp
Go to the documentation of this file.
1
#include <iostream>
2
#include <memory>
3
4
#include "
create/serial_query.h
"
5
#include "
create/types.h
"
6
7
#define SENSORS_RESPONSE_LENGTH 20
8
9
namespace
create
{
10
11
SerialQuery::SerialQuery
(std::shared_ptr<Data> d,
bool
install_signal_handler)
12
:
Serial
(d, install_signal_handler),
13
streamRecoveryTimer(io),
14
packetID(
ID_BUMP_WHEELDROP
),
15
packetByte(0),
16
packetData(0),
17
maxPacketID(
ID_CAPACITY
) {
18
}
19
20
bool
SerialQuery::startSensorStream
() {
21
if
(!
started
) {
22
requestSensorData
();
23
started
=
true
;
24
}
25
return
true
;
26
}
27
28
void
SerialQuery::requestSensorData
() {
29
static
const
uint8_t requestPacket[2] = {
OC_SENSORS
,
ID_GROUP_0
};
30
// Prevents previous packet from corrupting next one
31
flushInput
();
32
send
(requestPacket, 2);
33
// Automatically resend request if no response is received
34
streamRecoveryTimer
.expires_from_now(boost::posix_time::milliseconds(50));
35
streamRecoveryTimer
.async_wait(
36
std::bind(&
SerialQuery::restartSensorStream
,
this
, std::placeholders::_1));
37
}
38
39
void
SerialQuery::restartSensorStream
(
const
boost::system::error_code& err) {
40
if
(err != boost::asio::error::operation_aborted) {
41
if
(
packetID
!=
ID_BUMP_WHEELDROP
) {
42
++
corruptPackets
;
43
}
44
requestSensorData
();
45
}
46
}
47
48
void
SerialQuery::flushInput
() {
49
// Only works with POSIX support
50
tcflush(
port
.lowest_layer().native_handle(), TCIFLUSH);
51
}
52
53
void
SerialQuery::processByte
(uint8_t byteRead) {
54
packetData
|= (
static_cast<
uint16_t
>
(
byteRead
) << (8 *
packetByte
));
55
56
if
(
packetByte
> 0) {
57
--
packetByte
;
58
}
else
if
(
packetID
<
maxPacketID
) {
59
// New packet
60
data
->getPacket(
packetID
)->setDataToValidate(
packetData
);
61
packetData
= 0;
62
++
packetID
;
63
packetByte
=
data
->getPacket(
packetID
)->nbytes - 1;
64
}
else
{
65
// Response finished
66
packetID
=
ID_BUMP_WHEELDROP
;
67
packetByte
= 0;
68
packetData
= 0;
69
notifyDataReady
();
70
requestSensorData
();
71
}
72
}
73
}
// namespace create
create::Serial::send
bool send(const uint8_t *bytes, const uint32_t numBytes)
Definition:
serial.cpp:211
create::SerialQuery::packetByte
int8_t packetByte
Definition:
serial_query.h:54
types.h
create::SerialQuery::maxPacketID
const uint8_t maxPacketID
Definition:
serial_query.h:56
create::SerialQuery::startSensorStream
bool startSensorStream()
Definition:
serial_query.cpp:20
create::SerialQuery::streamRecoveryTimer
boost::asio::deadline_timer streamRecoveryTimer
Definition:
serial_query.h:52
create::OC_SENSORS
@ OC_SENSORS
Definition:
types.h:181
create::SerialQuery::restartSensorStream
void restartSensorStream(const boost::system::error_code &err)
Definition:
serial_query.cpp:39
create::Serial
Definition:
serial.h:51
create::ID_CAPACITY
@ ID_CAPACITY
Definition:
types.h:120
create::Serial::corruptPackets
uint64_t corruptPackets
Definition:
serial.h:80
create::Serial::port
boost::asio::serial_port port
Definition:
serial.h:56
create::ID_BUMP_WHEELDROP
@ ID_BUMP_WHEELDROP
Definition:
types.h:99
create::Serial::byteRead
uint8_t byteRead
Definition:
serial.h:65
create::SerialQuery::started
bool started
Definition:
serial_query.h:58
create::SerialQuery::requestSensorData
void requestSensorData()
Definition:
serial_query.cpp:28
create::ID_GROUP_0
@ ID_GROUP_0
Definition:
types.h:88
create::SerialQuery::SerialQuery
SerialQuery(std::shared_ptr< Data > data, bool install_signal_handler=true)
Definition:
serial_query.cpp:11
create::SerialQuery::packetID
uint8_t packetID
Definition:
serial_query.h:53
create::SerialQuery::flushInput
void flushInput()
Definition:
serial_query.cpp:48
serial_query.h
create::Serial::notifyDataReady
void notifyDataReady()
Definition:
serial.cpp:174
create::SerialQuery::packetData
uint16_t packetData
Definition:
serial_query.h:55
create::Serial::data
std::shared_ptr< Data > data
Definition:
serial.h:78
create::SerialQuery::processByte
void processByte(uint8_t byteRead)
Definition:
serial_query.cpp:53
create
Definition:
create.h:48
libcreate
Author(s): Jacob Perron
autogenerated on Wed May 24 2023 02:24:57