Byggern
stream.h
1 #pragma once
2 
3 #include <string.h>
4 #include <avr/io.h>
5 
19 class Stream {
20 
21 protected:
22 
26  uint8_t *input_buffer;
27 
31  uint8_t *output_buffer;
32 
37 
42 
47 
52 
57 
62 
63  void (*event_input_buffer_not_empty)(Stream *stream) = nullptr;
64 
65  void (*event_output_buffer_not_empty)(Stream *stream) = nullptr;
66 
71  bool input_buffer_empty = true;
72 
77  bool output_buffer_empty = true;
78 
84 
90 
91 
102  virtual uint16_t ReadFromBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, uint8_t *string, uint16_t &string_size);
103 
117  virtual void WriteToBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, bool &overflow_flag, uint8_t *string, uint16_t &string_size, void (*cb)(Stream *stream));
118 
128  virtual bool ReadByteFromBuffer(uint8_t& byte, uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty);
129 
142  virtual void WriteByteToBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, bool &overflow_flag, uint8_t &byte, void (*cb)(Stream *stream));
143 
148  virtual void WriteByteToInputStream(uint8_t &byte);
149 
154  virtual bool ReadByteFromOutputStream(uint8_t& byte);
155 
161  virtual void WriteToInputStream(uint8_t *string, uint16_t size);
162 
168  virtual uint16_t ReadFromOutputStream(uint8_t *string, uint16_t size);
169 
177  virtual uint16_t CalculateLength(uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty);
186  virtual void FlushStream(uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty);
187 
188 
189 public:
190 
196  Stream(uint16_t input_stream_size, uint16_t output_stream_size);
197 
203  virtual void Write(uint8_t *string, uint16_t size);
204 
210  virtual uint16_t Read(uint8_t *string, uint16_t size);
211 
216  virtual bool ReadByte(uint8_t& byte);
217 
222  virtual void WriteByte(uint8_t byte);
223 
228  virtual uint8_t GetAvailableWriteBytes();
229 
234  virtual uint8_t GetAvailableReadBytes();
235 
240  virtual bool CheckInputOverflowFlag();
241 
246  virtual bool CheckOutputOverflowFlag();
247 
252  virtual uint16_t GetInputBufferLength();
253 
258  virtual uint16_t GetOutputBufferLength();
259 
263  virtual void FlushInputBuffer();
264 
268  virtual void FlushOutputBuffer();
269 };
virtual void WriteToBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, bool &overflow_flag, uint8_t *string, uint16_t &string_size, void(*cb)(Stream *stream))
Definition: stream.cpp:82
Stream(uint16_t input_stream_size, uint16_t output_stream_size)
Definition: stream.cpp:199
uint8_t * output_buffer
Definition: stream.h:31
virtual bool CheckInputOverflowFlag()
Definition: stream.cpp:160
virtual bool ReadByteFromOutputStream(uint8_t &byte)
Definition: stream.cpp:114
This class is an interface for implementing a duplex FIFO stream.
Definition: stream.h:19
virtual uint16_t ReadFromBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, uint8_t *string, uint16_t &string_size)
Definition: stream.cpp:58
virtual void FlushOutputBuffer()
Definition: stream.cpp:194
uint16_t output_buffer_size
Definition: stream.h:61
virtual void WriteByteToInputStream(uint8_t &byte)
Definition: stream.cpp:124
virtual uint8_t GetAvailableReadBytes()
Definition: stream.cpp:28
bool input_buffer_empty
Definition: stream.h:71
virtual bool CheckOutputOverflowFlag()
Definition: stream.cpp:52
virtual uint16_t CalculateLength(uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty)
Definition: stream.cpp:166
virtual uint16_t GetInputBufferLength()
Definition: stream.cpp:175
virtual void FlushInputBuffer()
Definition: stream.cpp:189
virtual void WriteToInputStream(uint8_t *string, uint16_t size)
Definition: stream.cpp:16
uint16_t input_buffer_size
Definition: stream.h:56
virtual void WriteByte(uint8_t byte)
Definition: stream.cpp:47
virtual void FlushStream(uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty)
Definition: stream.cpp:183
uint16_t input_buffer_stop_index
Definition: stream.h:46
virtual bool ReadByteFromBuffer(uint8_t &byte, uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty)
Definition: stream.cpp:129
bool output_buffer_overflowed
Definition: stream.h:89
virtual void Write(uint8_t *string, uint16_t size)
Definition: stream.cpp:12
uint8_t * input_buffer
Definition: stream.h:26
virtual uint16_t GetOutputBufferLength()
Definition: stream.cpp:179
virtual void WriteByteToBuffer(uint8_t *buffer, uint16_t &start_index, uint16_t &stop_index, uint16_t &buffer_size, bool &empty, bool &overflow_flag, uint8_t &byte, void(*cb)(Stream *stream))
Definition: stream.cpp:143
virtual uint16_t ReadFromOutputStream(uint8_t *string, uint16_t size)
Definition: stream.cpp:171
virtual uint8_t GetAvailableWriteBytes()
Definition: stream.cpp:24
bool input_buffer_overflowed
Definition: stream.h:83
virtual uint16_t Read(uint8_t *string, uint16_t size)
Definition: stream.cpp:20
virtual bool ReadByte(uint8_t &byte)
Definition: stream.cpp:37
bool output_buffer_empty
Definition: stream.h:77
uint16_t output_buffer_start_index
Definition: stream.h:41
uint16_t input_buffer_start_index
Definition: stream.h:36
uint16_t output_buffer_stop_index
Definition: stream.h:51