Byggern
socket.h
1 #pragma once
2 #include "avr/io.h"
3 #include "../can/can.h"
4 #include "../stream/stream.h"
5 #include <stdio.h>
6 
14 class Socket : public Stream {
15 
16 private:
20  uint8_t id;
21 
22 public:
23 
24  CAN *can;
25 
26 #pragma clang diagnostic push
27 #pragma clang diagnostic ignored "-Wreturn-type"
28 
33  static Socket& GetInstance(uint8_t id = 0){
34  if(id == 0){
35  static Socket instance(0);
36  return instance;
37  }else if (id == 1){
38  static Socket instance(1);
39  return instance;
40  }
41  }
42 #pragma clang diagnostic pop
43 
48  static void HandleDataFromLowerLevel(CanMessage &message) {
49  Socket &socket = Socket::GetInstance(message.id);
50  socket.WriteToInputStream(message.data, message.size);
51  }
52 
56  Socket(const Socket&) = delete;
57 
62  Socket(uint8_t id) : Stream(255, 1), id(id){
63  }
64 
70  void Initialize(CAN *can){
71  Socket::can = can;
73  }
74 
80  void Write(uint8_t *string, uint16_t size);
81 
86  void WriteByte(uint8_t byte);
87 };
This class is an interface for implementing a duplex FIFO stream.
Definition: stream.h:19
Struct defining a CAN Message.
Definition: can.h:6
uint16_t id
Definition: can.h:20
void Write(uint8_t *string, uint16_t size)
Definition: socket.cpp:5
virtual void WriteToInputStream(uint8_t *string, uint16_t size)
Definition: stream.cpp:16
static Socket & GetInstance(uint8_t id=0)
Definition: socket.h:33
uint8_t * data
Definition: can.h:15
Socket(uint8_t id)
Definition: socket.h:62
void WriteByte(uint8_t byte)
Definition: socket.cpp:42
void SetUpperLevel(void(*handler)(CanMessage &data))
Definition: can.h:50
A socket which defines the communication in a CAN channel.
Definition: socket.h:14
uint8_t size
Definition: can.h:10
uint8_t id
Definition: socket.h:20
static void HandleDataFromLowerLevel(CanMessage &message)
Definition: socket.h:48
void Initialize(CAN *can)
Definition: socket.h:70
Purely virtual class defining a CAN interface.
Definition: can.h:34
Socket(const Socket &)=delete