Arduino KVComm  master
Key-Value pair communication library for Arduino
SLIPStream.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 #include <Stream.h>
6 
9 
15 class SLIPStream {
16  public:
18  struct StreamSender {
19  StreamSender(Stream &stream) : stream(&stream) {}
21  size_t operator()(uint8_t c) const { return stream->write(c); }
22  Stream *stream;
23  };
24 
25  public:
27  : stream(&stream), parser(parser) {}
28  SLIPStream(Stream &stream) : stream(&stream), parser(nullptr, 0) {}
29 
41  size_t writePacket(const uint8_t *data, size_t len);
42 
44  size_t beginPacket();
46  size_t write(const uint8_t *data, size_t len);
48  size_t endPacket();
49 
57  size_t readPacket();
58 
60  bool wasTruncated() const { return parser.wasTruncated(); }
61 
63  size_t numTruncated() const { return parser.numTruncated(); }
64 
65  private:
66  Stream *stream;
68 };
69 
71 
74 
83 template <class CRC>
85  public:
87 
88  SLIPStreamCRC(Stream &stream, CRC &&senderCRC, const SLIPParser &parser,
89  CRC &&parserCRC)
90  : stream(&stream), sender(stream, std::forward<CRC>(senderCRC)),
91  parser(parser, std::forward<CRC>(parserCRC)) {}
92 
104  size_t writePacket(const uint8_t *data, size_t len);
105 
107  size_t beginPacket();
109  size_t write(const uint8_t *data, size_t len);
111  size_t endPacket();
112 
114  size_t readPacket();
115 
117  bool wasTruncated() const { return parser.wasTruncated(); }
119  size_t numTruncated() const { return parser.numTruncated(); }
120 
123 
125  checksum_t checksum() const { return parser.checksum(); }
126 
127  private:
128  Stream *stream;
131 };
132 
134 
135 #include "SLIPStream.ipp"
SLIPStream::beginPacket
size_t beginPacket()
Start a packet.
Definition: SLIPStream.cpp:17
SLIPStream::writePacket
size_t writePacket(const uint8_t *data, size_t len)
Sends a packet.
Definition: SLIPStream.cpp:5
SLIPStream::StreamSender::StreamSender
StreamSender(Stream *stream)
Definition: SLIPStream.hpp:20
SLIPStream::SLIPStream
SLIPStream(Stream &stream)
Definition: SLIPStream.hpp:28
SLIPParserCRC::checksum_t
typename boost::uint_t< CRC::bit_count >::least checksum_t
The integer type of the checksum.
Definition: SLIPParser.hpp:145
SLIPStream.ipp
SLIPStream
Class that implements SLIP, a simple packet framing protocol.
Definition: SLIPStream.hpp:15
SLIPStream::StreamSender::operator()
size_t operator()(uint8_t c) const
Definition: SLIPStream.hpp:21
SLIPStreamCRC::sender
SLIPSenderCRC< StreamSender, CRC > sender
Definition: SLIPStream.hpp:129
SLIPStreamCRC::checksum_t
typename SLIPParserCRC< CRC >::checksum_t checksum_t
The integer type of the checksum.
Definition: SLIPStream.hpp:122
SLIPStreamCRC::parser
SLIPParserCRC< CRC > parser
Definition: SLIPStream.hpp:130
SLIPStreamCRC::endPacket
size_t endPacket()
Finish the packet.
Definition: SLIPStream.ipp:25
SLIPStreamCRC::SLIPStreamCRC
SLIPStreamCRC(Stream &stream, CRC &&senderCRC, const SLIPParser &parser, CRC &&parserCRC)
Definition: SLIPStream.hpp:88
SLIPParserCRC
Class for parsing SLIP packets with a CRC checksum to check the integrity of the packets.
Definition: SLIPParser.hpp:138
SLIPStream::wasTruncated
bool wasTruncated() const
Check if the previous packet was truncated.
Definition: SLIPStream.hpp:60
SLIPStream::parser
SLIPParser parser
Definition: SLIPStream.hpp:67
SLIPStream::stream
Stream * stream
Definition: SLIPStream.hpp:66
SLIPParser
Class for parsing SLIP packets.
Definition: SLIPParser.hpp:17
SLIPParser::wasTruncated
bool wasTruncated() const
Check if the previous packet was truncated.
Definition: SLIPParser.hpp:106
SLIPStream::SLIPStream
SLIPStream(Stream &stream, const SLIPParser &parser)
Definition: SLIPStream.hpp:26
SLIPStream::StreamSender::StreamSender
StreamSender(Stream &stream)
Definition: SLIPStream.hpp:19
SLIPStreamCRC::readPacket
size_t readPacket()
Receives a packet into the read buffer.
Definition: SLIPStream.ipp:30
SLIPParser::numTruncated
size_t numTruncated() const
Get the number of bytes that were truncated due to the previous packet being too large for the buffer...
Definition: SLIPParser.hpp:112
SLIPStreamCRC::numTruncated
size_t numTruncated() const
Get the number of bytes that were truncated due to the previous packet being too large for the buffer...
Definition: SLIPStream.hpp:119
SLIPStream::write
size_t write(const uint8_t *data, size_t len)
Write some data as the body of a packet.
Definition: SLIPStream.cpp:13
SLIPStream::endPacket
size_t endPacket()
Finish the packet.
Definition: SLIPStream.cpp:21
SLIPStreamCRC::checksum
checksum_t checksum() const
Get the checksum of the previous packet.
Definition: SLIPStream.hpp:125
SLIPStreamCRC::stream
Stream * stream
Definition: SLIPStream.hpp:128
SLIPStreamCRC::beginPacket
size_t beginPacket()
Start a packet.
Definition: SLIPStream.ipp:20
std
Definition: vector.cpp:5
SLIPStreamCRC::write
size_t write(const uint8_t *data, size_t len)
Write some data as the body of a packet.
Definition: SLIPStream.ipp:15
SLIPSender.hpp
SLIPStreamCRC::wasTruncated
bool wasTruncated() const
Check if the previous packet was truncated.
Definition: SLIPStream.hpp:117
SLIPStreamCRC
Class that implements SLIP, a simple packet framing protocol, and that uses cyclic redundancy checks ...
Definition: SLIPStream.hpp:84
SLIPParser.hpp
SLIPStream::StreamSender
Functor that sends bytes over an Arduino Stream.
Definition: SLIPStream.hpp:18
SLIPSenderCRC
Class for sending SLIP packets with a CRC checksum to check the integrity of the packets.
Definition: SLIPSender.hpp:94
SLIPStream::numTruncated
size_t numTruncated() const
Get the number of bytes that were truncated due to the previous packet being too large for the buffer...
Definition: SLIPStream.hpp:63
SLIPStream::readPacket
size_t readPacket()
Receives a packet into the read buffer.
Definition: SLIPStream.cpp:25
SLIPStream::StreamSender::stream
Stream * stream
Definition: SLIPStream.hpp:22
SLIPStreamCRC::writePacket
size_t writePacket(const uint8_t *data, size_t len)
Sends a packet.
Definition: SLIPStream.ipp:6