Max OS 0.3
Loading...
Searching...
No Matches
ethernet.cpp
Go to the documentation of this file.
1
10
11using namespace MaxOS;
12using namespace MaxOS::common;
13using namespace MaxOS::drivers;
14using namespace MaxOS::drivers::ethernet;
15
17
19
20EthernetDriverEventHandler::~EthernetDriverEventHandler() = default;
21
30 return false;
31}
32
41
50
58
59 switch (event->type) {
60
61 case EthernetDriverEvents::BEFORE_SEND:
62 before_send(((BeforeSendEvent*) event)->buffer, ((BeforeSendEvent*) event)->size);
63 break;
64
65 case EthernetDriverEvents::DATA_SENT:
66 data_sent(((DataSentEvent*) event)->buffer, ((DataSentEvent*) event)->size);
67 break;
68
69 case EthernetDriverEvents::DATA_RECEIVED:
70 event->return_value.bool_value = data_received(((DataReceivedEvent*) event)->buffer,
71 ((DataReceivedEvent*) event)->size);
72 break;
73
74 default:
75 break;
76 }
77
78 return event;
79}
80
81EthernetDriver::EthernetDriver() = default;
82EthernetDriver::~EthernetDriver() = default;
83
92
100
101 // Raise the event
102 raise_event(new BeforeSendEvent(buffer, size));
103
104 do_send(buffer, size);
105}
106
114}
115
123
124 // Raise the event
126 raise_event(new DataReceivedEvent(buffer, size));
127
128 // Loop through the events
129 for (auto &value : values) {
130 switch (value->type) {
131 case EthernetDriverEvents::DATA_RECEIVED:
132 if (value->return_value.bool_value)
133 send(buffer, size);
134 break;
135
136 default:
137 break;
138 }
139 }
140}
141
149 raise_event(new DataSentEvent(buffer, size));
150}
151
152// if your mac address is e.g. 1c:6f:65:07:ad:1a (see output of ifconfig)
153// then you would call CreateMediaAccessControlAddress(0x1c, 0x6f, 0x65, 0x07, 0xad, 0x1a)
166 return // digit6 is the most significant byte
167 (uint64_t) digit6 << 40
168 | (uint64_t) digit5 << 32
169 | (uint64_t) digit4 << 24
170 | (uint64_t) digit3 << 16
171 | (uint64_t) digit2 << 8
172 | (uint64_t) digit1;
173}
174
182 : Event(EthernetDriverEvents::DATA_SENT) {
183 this->buffer = buffer;
184 this->size = size;
185 this->size = size;
186}
187
188DataSentEvent::~DataSentEvent() = default;
189
197 : Event(EthernetDriverEvents::DATA_RECEIVED) {
198 this->buffer = buffer;
199 this->size = size;
200}
201
202DataReceivedEvent::~DataReceivedEvent()
203= default;
204
212 : Event(EthernetDriverEvents::BEFORE_SEND) {
213 this->buffer = buffer;
214 this->size = size;
215}
216
217BeforeSendEvent::~BeforeSendEvent()
218= default;
Vector< Event< EthernetDriverEvents > * > raise_event(Event< EthernetDriverEvents > *event)
Calls the on_event function of all the event m_handlers connected to the event manager and returns a ...
Used to store information about an event, has a type and a return value.
Stores the left, top, width and height of a rectangle.
Definition rectangle.h:22
Event that is triggered before data is sent, holds the buffer and size of the data.
Definition ethernet.h:37
BeforeSendEvent(uint8_t *buffer, uint32_t size)
Construct a new Before send Event object.
Definition ethernet.cpp:211
uint32_t size
The size of the buffer to be sent.
Definition ethernet.h:40
uint8_t * buffer
The buffer to be sent.
Definition ethernet.h:39
Event that is triggered when data is received, holds the buffer and size of the data.
Definition ethernet.h:61
DataReceivedEvent(uint8_t *buffer, uint32_t size)
Construct a new Data Received Event object.
Definition ethernet.cpp:196
Event that is triggered when data is sent, holds the buffer and size of the data.
Definition ethernet.h:49
uint8_t * buffer
The buffer that was sent.
Definition ethernet.h:51
DataSentEvent(uint8_t *buffer, uint32_t size)
Construct a new Data Sent Event object.
Definition ethernet.cpp:181
uint32_t size
The size of the buffer that was sent.
Definition ethernet.h:52
virtual void before_send(uint8_t *buffer, uint32_t size)
Handle before send event.
Definition ethernet.cpp:39
common::Event< EthernetDriverEvents > * on_event(common::Event< EthernetDriverEvents > *event) override
Handle an event.
Definition ethernet.cpp:57
virtual void data_sent(uint8_t *buffer, uint32_t size)
Handle data sent event.
Definition ethernet.cpp:48
virtual bool data_received(uint8_t *buffer, uint32_t size)
Handle data received event.
Definition ethernet.cpp:29
static MediaAccessControlAddress create_media_access_control_address(uint8_t digit1, uint8_t digit2, uint8_t digit3, uint8_t digit4, uint8_t digit5, uint8_t digit6)
Create a Media Access Control Address.
Definition ethernet.cpp:165
virtual MediaAccessControlAddress get_media_access_control_address()
Get the MAC address.
Definition ethernet.cpp:89
void send(uint8_t *buffer, uint32_t size)
send data to the network via the driver backend
Definition ethernet.cpp:99
void fire_data_received(uint8_t *buffer, uint32_t size)
Handle the recieved data.
Definition ethernet.cpp:122
virtual void do_send(uint8_t *buffer, uint32_t size)
(Device Side) send the data
Definition ethernet.cpp:113
void fire_data_sent(uint8_t *buffer, uint32_t size)
send data
Definition ethernet.cpp:148
Defines an EthernetDriver class for managing Ethernet communication, including sending and receiving ...
EthernetDriverEvents
Events that can be triggered by the Ethernet Driver.
Definition ethernet.h:27