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_stream.cpp
Go to the documentation of this file.
1
#include <iostream>
2
#include <memory>
3
4
#include "
create/serial_stream.h
"
5
#include "
create/types.h
"
6
7
namespace
create
{
8
9
SerialStream::SerialStream
(std::shared_ptr<Data> d,
const
uint8_t& header,
bool
install_signal_handler) :
Serial
(d, install_signal_handler), readState(READ_HEADER), headerByte(header) {
10
}
11
12
bool
SerialStream::startSensorStream
() {
13
// Request from Create that we want a stream containing all packets
14
const
uint8_t numPackets =
data
->getNumPackets();
15
std::vector<uint8_t> packetIDs =
data
->getPacketIDs();
16
packetIDs.insert(packetIDs.begin(), numPackets);
17
packetIDs.insert(packetIDs.begin(),
OC_STREAM
);
18
19
// Start streaming data
20
send
(packetIDs.data(), packetIDs.size());
21
22
expectedNumBytes
=
data
->getTotalDataBytes() + numPackets;
23
24
return
true
;
25
}
26
27
void
SerialStream::processByte
(uint8_t byteRead) {
28
numBytesRead
++;
29
byteSum
+=
byteRead
;
30
switch
(
readState
) {
31
case
READ_HEADER
:
32
if
(
byteRead
==
headerByte
) {
33
readState
=
READ_NBYTES
;
34
byteSum
=
byteRead
;
35
}
36
break
;
37
38
case
READ_NBYTES
:
39
if
(
byteRead
==
expectedNumBytes
) {
40
readState
=
READ_PACKET_ID
;
41
numBytesRead
= 0;
42
}
43
else
{
44
//notifyDataReady();
45
readState
=
READ_HEADER
;
46
}
47
break
;
48
49
case
READ_PACKET_ID
:
50
packetID
=
byteRead
;
51
if
(
data
->isValidPacketID(
packetID
)) {
52
expectedNumDataBytes
=
data
->getPacket(
packetID
)->nbytes;
53
assert(
expectedNumDataBytes
== 1 ||
expectedNumDataBytes
== 2);
54
numDataBytesRead
= 0;
55
packetBytes
= 0;
56
readState
=
READ_PACKET_BYTES
;
57
}
58
else
{
59
//notifyDataReady();
60
readState
=
READ_HEADER
;
61
}
62
break
;
63
64
case
READ_PACKET_BYTES
:
65
numDataBytesRead
++;
66
if
(
expectedNumDataBytes
== 2 &&
numDataBytesRead
== 1) {
67
// High byte first
68
packetBytes
= (
byteRead
<< 8) & 0xff00;
69
}
70
else
{
71
// Low byte
72
packetBytes
+=
byteRead
;
73
}
74
if
(
numDataBytesRead
>=
expectedNumDataBytes
) {
75
data
->getPacket(
packetID
)->setDataToValidate(
packetBytes
);
76
if
(
numBytesRead
>=
expectedNumBytes
)
77
readState
=
READ_CHECKSUM
;
78
else
79
readState
=
READ_PACKET_ID
;
80
}
81
break
;
82
83
case
READ_CHECKSUM
:
84
if
((
byteSum
& 0xFF) == 0) {
85
notifyDataReady
();
86
}
87
else
{
88
// Corrupt data
89
corruptPackets
++;
90
}
91
totalPackets
++;
92
// Start again
93
readState
=
READ_HEADER
;
94
break
;
95
}
// end switch (readState)
96
}
97
98
}
// namespace create
create::SerialStream::readState
ReadState readState
Definition:
serial_stream.h:57
create::Serial::totalPackets
uint64_t totalPackets
Definition:
serial.h:81
create::SerialStream::processByte
void processByte(uint8_t byteRead)
Definition:
serial_stream.cpp:27
create::Serial::send
bool send(const uint8_t *bytes, const uint32_t numBytes)
Definition:
serial.cpp:211
serial_stream.h
types.h
create::SerialStream::byteSum
uint32_t byteSum
Definition:
serial_stream.h:63
create::SerialStream::READ_PACKET_BYTES
@ READ_PACKET_BYTES
Definition:
serial_stream.h:52
create::SerialStream::READ_PACKET_ID
@ READ_PACKET_ID
Definition:
serial_stream.h:51
create::SerialStream::expectedNumBytes
uint8_t expectedNumBytes
Definition:
serial_stream.h:60
create::SerialStream::packetBytes
uint16_t packetBytes
Definition:
serial_stream.h:61
create::SerialStream::numBytesRead
uint8_t numBytesRead
Definition:
serial_stream.h:62
create::Serial
Definition:
serial.h:51
create::Serial::corruptPackets
uint64_t corruptPackets
Definition:
serial.h:80
create::SerialStream::headerByte
uint8_t headerByte
Definition:
serial_stream.h:58
create::SerialStream::READ_HEADER
@ READ_HEADER
Definition:
serial_stream.h:49
create::SerialStream::startSensorStream
bool startSensorStream()
Definition:
serial_stream.cpp:12
create::SerialStream::SerialStream
SerialStream(std::shared_ptr< Data > data, const uint8_t &header=create::util::STREAM_HEADER, bool install_signal_handler=true)
Definition:
serial_stream.cpp:9
create::Serial::byteRead
uint8_t byteRead
Definition:
serial.h:65
create::SerialStream::numDataBytesRead
uint8_t numDataBytesRead
Definition:
serial_stream.h:64
create::SerialStream::expectedNumDataBytes
uint8_t expectedNumDataBytes
Definition:
serial_stream.h:65
create::SerialStream::READ_CHECKSUM
@ READ_CHECKSUM
Definition:
serial_stream.h:53
create::SerialStream::READ_NBYTES
@ READ_NBYTES
Definition:
serial_stream.h:50
create::Serial::notifyDataReady
void notifyDataReady()
Definition:
serial.cpp:174
create::OC_STREAM
@ OC_STREAM
Definition:
types.h:183
create::Serial::data
std::shared_ptr< Data > data
Definition:
serial.h:78
create
Definition:
create.h:48
create::SerialStream::packetID
uint8_t packetID
Definition:
serial_stream.h:59
libcreate
Author(s): Jacob Perron
autogenerated on Wed May 24 2023 02:24:57