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 
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) {
34  byteSum = byteRead;
35  }
36  break;
37 
38  case READ_NBYTES:
39  if (byteRead == expectedNumBytes) {
41  numBytesRead = 0;
42  }
43  else {
44  //notifyDataReady();
46  }
47  break;
48 
49  case READ_PACKET_ID:
51  if (data->isValidPacketID(packetID)) {
52  expectedNumDataBytes = data->getPacket(packetID)->nbytes;
53  assert(expectedNumDataBytes == 1 || expectedNumDataBytes == 2);
54  numDataBytesRead = 0;
55  packetBytes = 0;
57  }
58  else {
59  //notifyDataReady();
61  }
62  break;
63 
64  case READ_PACKET_BYTES:
66  if (expectedNumDataBytes == 2 && numDataBytesRead == 1) {
67  // High byte first
68  packetBytes = (byteRead << 8) & 0xff00;
69  }
70  else {
71  // Low byte
73  }
75  data->getPacket(packetID)->setDataToValidate(packetBytes);
78  else
80  }
81  break;
82 
83  case READ_CHECKSUM:
84  if ((byteSum & 0xFF) == 0) {
86  }
87  else {
88  // Corrupt data
90  }
91  totalPackets++;
92  // Start again
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