Mbed OS Reference
Loading...
Searching...
No Matches
EMW3080B_EMAC.h
1/*
2 * Copyright (c) STMicroelectronics 2021
3 * SPDX-License-Identifier: Apache-2.0
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef EMW3080B_EMAC_H_
19#define EMW3080B_EMAC_H_
20
21#include <inttypes.h>
22
23#include "mbed.h"
24#include "mbed_debug.h"
25#include "EMACInterface.h"
26#include "WiFiInterface.h"
27#include "mx_wifi.h"
28
29extern EMACMemoryManager *emac3080b_global_memory_manager ;
30
31
32class EMW3080B_EMAC : public EMAC {
33public:
35
36 static EMW3080B_EMAC &get_instance();
37
38 /**
39 * Return maximum transmission unit
40 *
41 * @return MTU in bytes
42 */
43 virtual uint32_t get_mtu_size() const;
44
45 /**
46 * Gets memory buffer alignment preference
47 *
48 * Gets preferred memory buffer alignment of the Emac device. IP stack may or may not
49 * align link out memory buffer chains using the alignment.
50 *
51 * @return Memory alignment requirement in bytes
52 */
53 virtual uint32_t get_align_preference() const;
54
55 /**
56 * Return interface name
57 *
58 * @param name Pointer to where the name should be written
59 * @param size Maximum number of character to copy
60 */
61 virtual void get_ifname(char *name, uint8_t size) const;
62
63 /**
64 * Returns size of the underlying interface HW address size.
65 *
66 * @return HW address size in bytes
67 */
68 virtual uint8_t get_hwaddr_size() const;
69
70 bool get_hwaddr(uint8_t *addr) const override;
71
72 /**
73 * Set HW address for interface
74 *
75 * Provided address has to be of correct size, see @a get_hwaddr_size
76 *
77 * Called to set the MAC address to actually use - if @a get_hwaddr is provided
78 * the stack would normally use that, but it could be overridden, eg for test
79 * purposes.
80 *
81 * @param addr Address to be set
82 */
83 virtual void set_hwaddr(const uint8_t *addr);
84
85 /**
86 * Sends the packet over the link
87 *
88 * That can not be called from an interrupt context.
89 *
90 * @param buf Packet to be send
91 * @return True if the packet was send successfully, False otherwise
92 */
93 virtual bool link_out(emac_mem_buf_t *buf);
94
95 /**
96 * Initializes the HW
97 *
98 * @return True on success, False in case of an error.
99 */
100 virtual bool power_up();
101
102 /**
103 * Deinitializes the HW
104 *
105 */
106 virtual void power_down();
107
108 /**
109 * Sets a callback that needs to be called for packets received for that interface
110 *
111 * @param input_cb Function to be register as a callback
112 */
114
115 /**
116 * Sets a callback that needs to be called on link status changes for given interface
117 *
118 * @param state_cb Function to be register as a callback
119 */
121
122 /** Add device to a multicast group
123 *
124 * @param address A multicast group hardware address
125 */
126 virtual void add_multicast_group(const uint8_t *address);
127
128 /** Remove device from a multicast group
129 *
130 * @param address A multicast group hardware address
131 */
132 virtual void remove_multicast_group(const uint8_t *address);
133
134 /** Request reception of all multicast packets
135 *
136 * @param all True to receive all multicasts
137 * False to receive only multicasts addressed to specified groups
138 */
139 virtual void set_all_multicast(bool all);
140
141 /** Sets memory manager that is used to handle memory buffers
142 *
143 * @param mem_mngr Pointer to memory manager
144 */
145 virtual void set_memory_manager(EMACMemoryManager &mem_mngr);
146
147 void mx_wifi_status_changed(uint8_t cate, uint8_t status, void *arg);
148 void mx_wifi_netlink_input_callback(mx_buf_t *buffer);
149
150#define EMW3080B_HWADDR_SIZE 6
151
152 emac_link_input_cb_t _emac_link_input_cb; /**< Callback for incoming data */
153 emac_link_state_change_cb_t _emac_link_state_cb;
154 emac_link_input_cb_t _emac_input_data_cb;
155 EMACMemoryManager *_memory_manager;
156 uint8_t _mac_addr[EMW3080B_HWADDR_SIZE];
157
158 uint8_t _debug_level;
159};
160
161#endif /* EMW3080B_EMAC_H_ */
Common interface between Wi-Fi devices.
This interface should be used to abstract low level access to networking hardware All operations rece...
Definition: EMAC.h:33
virtual void set_link_state_cb(emac_link_state_change_cb_t state_cb)
Sets a callback that needs to be called on link status changes for given interface.
virtual void remove_multicast_group(const uint8_t *address)
Remove device from a multicast group.
virtual void set_hwaddr(const uint8_t *addr)
Set HW address for interface.
virtual void add_multicast_group(const uint8_t *address)
Add device to a multicast group.
virtual void set_all_multicast(bool all)
Request reception of all multicast packets.
emac_link_input_cb_t _emac_link_input_cb
Callback for incoming data.
virtual void set_link_input_cb(emac_link_input_cb_t input_cb)
Sets a callback that needs to be called for packets received for that interface.
virtual bool link_out(emac_mem_buf_t *buf)
Sends the packet over the link.
virtual uint32_t get_mtu_size() const
Return maximum transmission unit.
virtual uint32_t get_align_preference() const
Gets memory buffer alignment preference.
bool get_hwaddr(uint8_t *addr) const override
Return interface-supplied HW address.
virtual void power_down()
Deinitializes the HW.
virtual uint8_t get_hwaddr_size() const
Returns size of the underlying interface HW address size.
virtual bool power_up()
Initializes the HW.
virtual void get_ifname(char *name, uint8_t size) const
Return interface name.
virtual void set_memory_manager(EMACMemoryManager &mem_mngr)
Sets memory manager that is used to handle memory buffers.
Callback class based on template specialization.
Definition: Callback.h:53
Structure for an MX wifi buffer.