Mbed OS Reference
Loading...
Searching...
No Matches
wiced_emac.h
1/*
2 * Copyright (c) 2018 ARM Limited
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 WICED_EMAC_H_
19#define WICED_EMAC_H_
20
21#include "EMAC.h"
22#include "EMACInterface.h"
23#include "WiFiInterface.h"
24
25#include "rtos/Mutex.h"
26
27class WICED_EMAC : public EMAC {
28public:
29 WICED_EMAC();
30
31 static WICED_EMAC &get_instance();
32
33 /**
34 * Return maximum transmission unit
35 *
36 * @return MTU in bytes
37 */
38 virtual uint32_t get_mtu_size() const;
39
40 /**
41 * Gets memory buffer alignment preference
42 *
43 * Gets preferred memory buffer alignment of the Emac device. IP stack may or may not
44 * align link out memory buffer chains using the alignment.
45 *
46 * @return Memory alignment requirement in bytes
47 */
48 virtual uint32_t get_align_preference() const;
49
50 /**
51 * Return interface name
52 *
53 * @param name Pointer to where the name should be written
54 * @param size Maximum number of character to copy
55 */
56 virtual void get_ifname(char *name, uint8_t size) const;
57
58 /**
59 * Returns size of the underlying interface HW address size.
60 *
61 * @return HW address size in bytes
62 */
63 virtual uint8_t get_hwaddr_size() const;
64
65 bool get_hwaddr(uint8_t *addr) const override;
66
67 /**
68 * Set HW address for interface
69 *
70 * Provided address has to be of correct size, see @a get_hwaddr_size
71 *
72 * Called to set the MAC address to actually use - if @a get_hwaddr is provided
73 * the stack would normally use that, but it could be overridden, eg for test
74 * purposes.
75 *
76 * @param addr Address to be set
77 */
78 virtual void set_hwaddr(const uint8_t *addr);
79
80 /**
81 * Sends the packet over the link
82 *
83 * That can not be called from an interrupt context.
84 *
85 * @param buf Packet to be send
86 * @return True if the packet was send successfully, False otherwise
87 */
88 virtual bool link_out(emac_mem_buf_t *buf);
89
90 /**
91 * Initializes the HW
92 *
93 * @return True on success, False in case of an error.
94 */
95 virtual bool power_up();
96
97 /**
98 * Deinitializes the HW
99 *
100 */
101 virtual void power_down();
102
103 /**
104 * Sets a callback that needs to be called for packets received for that interface
105 *
106 * @param input_cb Function to be register as a callback
107 */
109
110 /**
111 * Sets a callback that needs to be called on link status changes for given interface
112 *
113 * @param state_cb Function to be register as a callback
114 */
116
117 /** Add device to a multicast group
118 *
119 * @param address A multicast group hardware address
120 */
121 virtual void add_multicast_group(const uint8_t *address);
122
123 /** Remove device from a multicast group
124 *
125 * @param address A multicast group hardware address
126 */
127 virtual void remove_multicast_group(const uint8_t *address);
128
129 /** Request reception of all multicast packets
130 *
131 * @param all True to receive all multicasts
132 * False to receive only multicasts addressed to specified groups
133 */
134 virtual void set_all_multicast(bool all);
135
136 /** Sets memory manager that is used to handle memory buffers
137 *
138 * @param mem_mngr Pointer to memory manager
139 */
140 virtual void set_memory_manager(EMACMemoryManager &mem_mngr);
141
142 emac_link_input_cb_t emac_link_input_cb; /**< Callback for incoming data */
143 emac_link_state_change_cb_t emac_link_state_cb;
144 EMACMemoryManager *memory_manager;
145};
146
147#endif /* WICED_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.
emac_link_input_cb_t emac_link_input_cb
Callback for incoming data.
Definition: wiced_emac.h:142
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.
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