Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
dynamic_i_bus_parser.hpp
Go to the documentation of this file.
1#pragma once
2#include "cool_serial/byte_queue.hpp"
3
6#include "cool_serial/dynamic_parser/dynamic_segment_extractor.hpp"
7
8#include <functional>
9
11{
22class DynamicParser : public coolSerial::StartOfFrameFoundListener, public coolSerial::SegmentFoundListener
23{
24public:
25 DynamicParser(coolSerial::ByteQueue& byteBuffer, IChannelDataFoundListener& listener);
26
27 void update()
28 {
29 state_.get().update();
30 }
31private:
35 class State
36 {
37 public:
38 virtual void update() = 0;
39 };
40
41 class StartOfFrameSearch : public State, public ibus::StartOfFrameSearch
42 {
43 public:
45 void update() override
46 {
48 }
49 };
50
51 class SegmentExtract : public State, public coolSerial::DynamicSegmentExtractor
52 {
53 public:
54 using DynamicSegmentExtractor::DynamicSegmentExtractor;
55 void update() override
56 {
57 DynamicSegmentExtractor::update();
58 }
59 };
60
61 IChannelDataFoundListener& channelDataFoundListener_;
62 StartOfFrameSearch startOfFrameSearch_;
63 // This extracts both the channel data and the associated checksum
64 SegmentExtract segmentExtract_;
65
66 std::reference_wrapper<State> state_{startOfFrameSearch_};
67
68 // State change logic
69 void startOfFrameFound() override;
70 void segmentFound(const coolSerial::Bytes& bytes) override;
71
75 uint16_t extractChecksumFromCombinedSegment(const coolSerial::Bytes& bytes);
76};
77}
Definition dynamic_i_bus_parser.hpp:23
void update()
Definition dynamic_i_bus_parser.hpp:27
Definition ichannel_data_found_listener.hpp:6
Definition i_bus_start_of_frame_search.hpp:12
StartOfFrameSearch(coolSerial::ByteQueue &queue, coolSerial::StartOfFrameFoundListener &listener)
Definition i_bus_start_of_frame_search.hpp:14
void update()
Definition i_bus_start_of_frame_search.cpp:4
Definition dynamic_i_bus_parser.cpp:8