LRT14  1.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
OffboardCommunication.h
1 #ifndef OFFBOARD_COMMUNICATION_H_
2 #define OFFBOARD_COMMUNICATION_H_
3 
4 #include "../Process/AsyncProcess.h"
5 #include <SerialPort.h>
6 #include <vector>
7 #include <semLib.h>
8 
13 {
14 public:
15  enum Stream
16  {
17  UNSET = -1,
18  AUTO_AIM = 0,
19  GAME_PIECE_TRACKING = 1,
20  LIDAR = 2,
21  };
22  enum Flag
23  {
24  AUTO_AIM_FLAG = 0x00,
25  GAME_PIECE_TRACKING_FLAG = 0x01,
26  LIDAR_FLAG = 0x02,
27  ESCAPE = 0x7D
28  };
29  enum ReadState
30  {
31  WAIT_HEADER,
32  IN_MSG,
33  AFTER_ESC
34  };
35 
36  static OffboardCommunication* Instance();
37  static void Initialize();
38  static void Finalize();
39 
41 
47  void Read(Stream stream, std::vector<char> &buffer);
48 
49 protected:
50  void Tick();
51 
52 private:
54 
55  inline Stream FlagToStream(Flag flag)
56  {
57  if (flag == AUTO_AIM_FLAG)
58  return AUTO_AIM;
59  if (flag == GAME_PIECE_TRACKING_FLAG)
60  return GAME_PIECE_TRACKING;
61  if (flag == LIDAR_FLAG)
62  return LIDAR;
63  return UNSET;
64  }
65 
66  static OffboardCommunication* m_instance;
67 
68  SerialPort* m_serial;
69 
70  std::vector<char> buffers[3];
71  std::vector<char> buffer;
72 
73  Stream currentStream;
74  ReadState currentState;
75 
76  SEM_ID sem[3];
77 };
78 
79 #endif /* OFFBOARD_COMMUNICATION_H_ */