Program Listing for File serial_stream.h

Return to documentation for file (/tmp/ws/src/libcreate/include/create/serial_stream.h)

// Based on example from:
//   https://github.com/labust/labust-ros-pkg/wiki/Create-a-Serial-Port-application

#ifndef CREATE_SERIAL_STREAM_H
#define CREATE_SERIAL_STREAM_H

#include <memory>

#include "create/data.h"
#include "create/types.h"
#include "create/util.h"
#include "create/serial.h"

namespace create {
  class SerialStream : public Serial {
    private:
      enum ReadState {
        READ_HEADER,
        READ_NBYTES,
        READ_PACKET_ID,
        READ_PACKET_BYTES,
        READ_CHECKSUM
      };

      // State machine variables
      ReadState readState;
      uint8_t headerByte;
      uint8_t packetID;
      uint8_t expectedNumBytes;
      uint16_t packetBytes;
      uint8_t numBytesRead;
      uint32_t byteSum;
      uint8_t numDataBytesRead;
      uint8_t expectedNumDataBytes;

    protected:
      bool startSensorStream();
      void processByte(uint8_t byteRead);

    public:
      SerialStream(
        std::shared_ptr<Data> data,
        const uint8_t& header = create::util::STREAM_HEADER,
        bool install_signal_handler = true);
      virtual ~SerialStream() = default;

  };
}  // namespace create

#endif // CREATE_SERIAL_H