mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
186:707f6e361f3e
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 167:e84263d55307 1 /* mbed Microcontroller Library
AnnaBridge 167:e84263d55307 2 * Copyright (c) 2016 Realtek Semiconductor Corp.
AnnaBridge 167:e84263d55307 3 *
AnnaBridge 167:e84263d55307 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 167:e84263d55307 5 * you may not use this file except in compliance with the License.
AnnaBridge 167:e84263d55307 6 * You may obtain a copy of the License at
AnnaBridge 167:e84263d55307 7 *
AnnaBridge 167:e84263d55307 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 167:e84263d55307 9 *
AnnaBridge 167:e84263d55307 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 167:e84263d55307 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 167:e84263d55307 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 167:e84263d55307 13 * See the License for the specific language governing permissions and
AnnaBridge 167:e84263d55307 14 * limitations under the License.
AnnaBridge 167:e84263d55307 15 */
Anna Bridge 186:707f6e361f3e 16
Anna Bridge 186:707f6e361f3e 17 #ifndef RTW_EMAC_H
Anna Bridge 186:707f6e361f3e 18 #define RTW_EMAC_H
Anna Bridge 186:707f6e361f3e 19
Anna Bridge 186:707f6e361f3e 20 #include "EMAC.h"
Anna Bridge 186:707f6e361f3e 21 #include "rtos/Semaphore.h"
Anna Bridge 186:707f6e361f3e 22 #include "rtos/Mutex.h"
Anna Bridge 186:707f6e361f3e 23 #include "netif.h"
Anna Bridge 186:707f6e361f3e 24 #include "EMACMemoryManager.h"
Anna Bridge 186:707f6e361f3e 25
Anna Bridge 186:707f6e361f3e 26
Anna Bridge 186:707f6e361f3e 27 class RTW_EMAC : public EMAC {
Anna Bridge 186:707f6e361f3e 28 public:
Anna Bridge 186:707f6e361f3e 29 RTW_EMAC();
Anna Bridge 186:707f6e361f3e 30
Anna Bridge 186:707f6e361f3e 31 static RTW_EMAC &get_instance();
Anna Bridge 186:707f6e361f3e 32
Anna Bridge 186:707f6e361f3e 33 /**
Anna Bridge 186:707f6e361f3e 34 * Return maximum transmission unit
Anna Bridge 186:707f6e361f3e 35 *
Anna Bridge 186:707f6e361f3e 36 * @return MTU in bytes
Anna Bridge 186:707f6e361f3e 37 */
Anna Bridge 186:707f6e361f3e 38 virtual uint32_t get_mtu_size() const;
AnnaBridge 167:e84263d55307 39
Anna Bridge 186:707f6e361f3e 40 /**
Anna Bridge 186:707f6e361f3e 41 * Gets memory buffer alignment preference
Anna Bridge 186:707f6e361f3e 42 *
Anna Bridge 186:707f6e361f3e 43 * Gets preferred memory buffer alignment of the Emac device. IP stack may or may not
Anna Bridge 186:707f6e361f3e 44 * align link out memory buffer chains using the alignment.
Anna Bridge 186:707f6e361f3e 45 *
Anna Bridge 186:707f6e361f3e 46 * @return Memory alignment requirement in bytes
Anna Bridge 186:707f6e361f3e 47 */
Anna Bridge 186:707f6e361f3e 48 virtual uint32_t get_align_preference() const;
Anna Bridge 186:707f6e361f3e 49
Anna Bridge 186:707f6e361f3e 50 /**
Anna Bridge 186:707f6e361f3e 51 * Return interface name
Anna Bridge 186:707f6e361f3e 52 *
Anna Bridge 186:707f6e361f3e 53 * @param name Pointer to where the name should be written
Anna Bridge 186:707f6e361f3e 54 * @param size Maximum number of character to copy
Anna Bridge 186:707f6e361f3e 55 */
Anna Bridge 186:707f6e361f3e 56 virtual void get_ifname(char *name, uint8_t size) const;
Anna Bridge 186:707f6e361f3e 57
Anna Bridge 186:707f6e361f3e 58 /**
Anna Bridge 186:707f6e361f3e 59 * Returns size of the underlying interface HW address size.
Anna Bridge 186:707f6e361f3e 60 *
Anna Bridge 186:707f6e361f3e 61 * @return HW address size in bytes
Anna Bridge 186:707f6e361f3e 62 */
Anna Bridge 186:707f6e361f3e 63 virtual uint8_t get_hwaddr_size() const;
Anna Bridge 186:707f6e361f3e 64
Anna Bridge 186:707f6e361f3e 65 /**
Anna Bridge 186:707f6e361f3e 66 * Return interface-supplied HW address
Anna Bridge 186:707f6e361f3e 67 *
Anna Bridge 186:707f6e361f3e 68 * Copies HW address to provided memory, @param addr has to be of correct size see @a get_hwaddr_size
Anna Bridge 186:707f6e361f3e 69 *
Anna Bridge 186:707f6e361f3e 70 * HW address need not be provided if this interface does not have its own HW
Anna Bridge 186:707f6e361f3e 71 * address configuration; stack will choose address from central system
Anna Bridge 186:707f6e361f3e 72 * configuration if the function returns false and does not write to addr.
Anna Bridge 186:707f6e361f3e 73 *
Anna Bridge 186:707f6e361f3e 74 * @param addr HW address for underlying interface
Anna Bridge 186:707f6e361f3e 75 * @return true if HW address is available
Anna Bridge 186:707f6e361f3e 76 */
Anna Bridge 186:707f6e361f3e 77 virtual bool get_hwaddr(uint8_t *addr) const;
AnnaBridge 167:e84263d55307 78
Anna Bridge 186:707f6e361f3e 79 /**
Anna Bridge 186:707f6e361f3e 80 * Set HW address for interface
Anna Bridge 186:707f6e361f3e 81 *
Anna Bridge 186:707f6e361f3e 82 * Provided address has to be of correct size, see @a get_hwaddr_size
Anna Bridge 186:707f6e361f3e 83 *
Anna Bridge 186:707f6e361f3e 84 * Called to set the MAC address to actually use - if @a get_hwaddr is provided
Anna Bridge 186:707f6e361f3e 85 * the stack would normally use that, but it could be overridden, eg for test
Anna Bridge 186:707f6e361f3e 86 * purposes.
Anna Bridge 186:707f6e361f3e 87 *
Anna Bridge 186:707f6e361f3e 88 * @param addr Address to be set
Anna Bridge 186:707f6e361f3e 89 */
Anna Bridge 186:707f6e361f3e 90 virtual void set_hwaddr(const uint8_t *addr);
Anna Bridge 186:707f6e361f3e 91
Anna Bridge 186:707f6e361f3e 92 /**
Anna Bridge 186:707f6e361f3e 93 * Sends the packet over the link
Anna Bridge 186:707f6e361f3e 94 *
Anna Bridge 186:707f6e361f3e 95 * That can not be called from an interrupt context.
Anna Bridge 186:707f6e361f3e 96 *
Anna Bridge 186:707f6e361f3e 97 * @param buf Packet to be send
Anna Bridge 186:707f6e361f3e 98 * @return True if the packet was send successfully, False otherwise
Anna Bridge 186:707f6e361f3e 99 */
Anna Bridge 186:707f6e361f3e 100 virtual bool link_out(emac_mem_buf_t *buf);
Anna Bridge 186:707f6e361f3e 101
Anna Bridge 186:707f6e361f3e 102 /**
Anna Bridge 186:707f6e361f3e 103 * Initializes the HW
Anna Bridge 186:707f6e361f3e 104 *
Anna Bridge 186:707f6e361f3e 105 * @return True on success, False in case of an error.
Anna Bridge 186:707f6e361f3e 106 */
Anna Bridge 186:707f6e361f3e 107 virtual bool power_up();
Anna Bridge 186:707f6e361f3e 108
Anna Bridge 186:707f6e361f3e 109 /**
Anna Bridge 186:707f6e361f3e 110 * Deinitializes the HW
Anna Bridge 186:707f6e361f3e 111 *
Anna Bridge 186:707f6e361f3e 112 */
Anna Bridge 186:707f6e361f3e 113 virtual void power_down();
Anna Bridge 186:707f6e361f3e 114
Anna Bridge 186:707f6e361f3e 115 /**
Anna Bridge 186:707f6e361f3e 116 * Sets a callback that needs to be called for packets received for that interface
Anna Bridge 186:707f6e361f3e 117 *
Anna Bridge 186:707f6e361f3e 118 * @param input_cb Function to be register as a callback
Anna Bridge 186:707f6e361f3e 119 */
Anna Bridge 186:707f6e361f3e 120 virtual void set_link_input_cb(emac_link_input_cb_t input_cb);
AnnaBridge 167:e84263d55307 121
Anna Bridge 186:707f6e361f3e 122 /**
Anna Bridge 186:707f6e361f3e 123 * Sets a callback that needs to be called on link status changes for given interface
Anna Bridge 186:707f6e361f3e 124 *
Anna Bridge 186:707f6e361f3e 125 * @param state_cb Function to be register as a callback
Anna Bridge 186:707f6e361f3e 126 */
Anna Bridge 186:707f6e361f3e 127 virtual void set_link_state_cb(emac_link_state_change_cb_t state_cb);
Anna Bridge 186:707f6e361f3e 128
Anna Bridge 186:707f6e361f3e 129 /** Add device to a multicast group
Anna Bridge 186:707f6e361f3e 130 *
Anna Bridge 186:707f6e361f3e 131 * @param address A multicast group hardware address
Anna Bridge 186:707f6e361f3e 132 */
Anna Bridge 186:707f6e361f3e 133 virtual void add_multicast_group(const uint8_t *address);
Anna Bridge 186:707f6e361f3e 134
Anna Bridge 186:707f6e361f3e 135 /** Remove device from a multicast group
Anna Bridge 186:707f6e361f3e 136 *
Anna Bridge 186:707f6e361f3e 137 * @param address A multicast group hardware address
Anna Bridge 186:707f6e361f3e 138 */
Anna Bridge 186:707f6e361f3e 139 virtual void remove_multicast_group(const uint8_t *address);
Anna Bridge 186:707f6e361f3e 140
Anna Bridge 186:707f6e361f3e 141 /** Request reception of all multicast packets
Anna Bridge 186:707f6e361f3e 142 *
Anna Bridge 186:707f6e361f3e 143 * @param all True to receive all multicasts
Anna Bridge 186:707f6e361f3e 144 * False to receive only multicasts addressed to specified groups
Anna Bridge 186:707f6e361f3e 145 */
Anna Bridge 186:707f6e361f3e 146 virtual void set_all_multicast(bool all);
Anna Bridge 186:707f6e361f3e 147
Anna Bridge 186:707f6e361f3e 148 /** Sets memory manager that is used to handle memory buffers
Anna Bridge 186:707f6e361f3e 149 *
Anna Bridge 186:707f6e361f3e 150 * @param mem_mngr Pointer to memory manager
Anna Bridge 186:707f6e361f3e 151 */
Anna Bridge 186:707f6e361f3e 152 virtual void set_memory_manager(EMACMemoryManager &mem_mngr);
Anna Bridge 186:707f6e361f3e 153
Anna Bridge 186:707f6e361f3e 154 virtual void wlan_emac_link_change(bool up);
Anna Bridge 186:707f6e361f3e 155
Anna Bridge 186:707f6e361f3e 156 private:
Anna Bridge 186:707f6e361f3e 157 static void wlan_emac_recv(void *param, struct netif *netif, uint32_t len);
Anna Bridge 186:707f6e361f3e 158 void *emac_link_input_data;
Anna Bridge 186:707f6e361f3e 159 void *emac_link_state_data;
Anna Bridge 186:707f6e361f3e 160 emac_link_input_cb_t emac_link_input_cb;
Anna Bridge 186:707f6e361f3e 161 emac_link_state_change_cb_t emac_link_state_cb;
Anna Bridge 186:707f6e361f3e 162 EMACMemoryManager *memory_manager;
Anna Bridge 186:707f6e361f3e 163 };
Anna Bridge 186:707f6e361f3e 164 #endif /* RTW_EMAC_H_ */
Anna Bridge 186:707f6e361f3e 165