mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
Diff: targets/TARGET_Realtek/TARGET_AMEBA/rtw_emac.h
- Revision:
- 186:707f6e361f3e
- Parent:
- 167:e84263d55307
--- a/targets/TARGET_Realtek/TARGET_AMEBA/rtw_emac.h Thu Apr 19 17:12:19 2018 +0100 +++ b/targets/TARGET_Realtek/TARGET_AMEBA/rtw_emac.h Fri Jun 22 16:45:37 2018 +0100 @@ -13,13 +13,153 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef MBED_WLAN_EMAC_H -#define MBED_WLAN_EMAC_H + +#ifndef RTW_EMAC_H +#define RTW_EMAC_H + +#include "EMAC.h" +#include "rtos/Semaphore.h" +#include "rtos/Mutex.h" +#include "netif.h" +#include "EMACMemoryManager.h" + + +class RTW_EMAC : public EMAC { +public: + RTW_EMAC(); + + static RTW_EMAC &get_instance(); + + /** + * Return maximum transmission unit + * + * @return MTU in bytes + */ + virtual uint32_t get_mtu_size() const; -#include "emac_api.h" + /** + * Gets memory buffer alignment preference + * + * Gets preferred memory buffer alignment of the Emac device. IP stack may or may not + * align link out memory buffer chains using the alignment. + * + * @return Memory alignment requirement in bytes + */ + virtual uint32_t get_align_preference() const; + + /** + * Return interface name + * + * @param name Pointer to where the name should be written + * @param size Maximum number of character to copy + */ + virtual void get_ifname(char *name, uint8_t size) const; + + /** + * Returns size of the underlying interface HW address size. + * + * @return HW address size in bytes + */ + virtual uint8_t get_hwaddr_size() const; + + /** + * Return interface-supplied HW address + * + * Copies HW address to provided memory, @param addr has to be of correct size see @a get_hwaddr_size + * + * HW address need not be provided if this interface does not have its own HW + * address configuration; stack will choose address from central system + * configuration if the function returns false and does not write to addr. + * + * @param addr HW address for underlying interface + * @return true if HW address is available + */ + virtual bool get_hwaddr(uint8_t *addr) const; -extern void wlan_emac_link_change(bool up); -extern emac_interface_t *wlan_emac_init_interface(); -extern void wlan_emac_recv(struct netif *netif, uint32_t len); + /** + * Set HW address for interface + * + * Provided address has to be of correct size, see @a get_hwaddr_size + * + * Called to set the MAC address to actually use - if @a get_hwaddr is provided + * the stack would normally use that, but it could be overridden, eg for test + * purposes. + * + * @param addr Address to be set + */ + virtual void set_hwaddr(const uint8_t *addr); + + /** + * Sends the packet over the link + * + * That can not be called from an interrupt context. + * + * @param buf Packet to be send + * @return True if the packet was send successfully, False otherwise + */ + virtual bool link_out(emac_mem_buf_t *buf); + + /** + * Initializes the HW + * + * @return True on success, False in case of an error. + */ + virtual bool power_up(); + + /** + * Deinitializes the HW + * + */ + virtual void power_down(); + + /** + * Sets a callback that needs to be called for packets received for that interface + * + * @param input_cb Function to be register as a callback + */ + virtual void set_link_input_cb(emac_link_input_cb_t input_cb); -#endif + /** + * Sets a callback that needs to be called on link status changes for given interface + * + * @param state_cb Function to be register as a callback + */ + virtual void set_link_state_cb(emac_link_state_change_cb_t state_cb); + + /** Add device to a multicast group + * + * @param address A multicast group hardware address + */ + virtual void add_multicast_group(const uint8_t *address); + + /** Remove device from a multicast group + * + * @param address A multicast group hardware address + */ + virtual void remove_multicast_group(const uint8_t *address); + + /** Request reception of all multicast packets + * + * @param all True to receive all multicasts + * False to receive only multicasts addressed to specified groups + */ + virtual void set_all_multicast(bool all); + + /** Sets memory manager that is used to handle memory buffers + * + * @param mem_mngr Pointer to memory manager + */ + virtual void set_memory_manager(EMACMemoryManager &mem_mngr); + + virtual void wlan_emac_link_change(bool up); + +private: + static void wlan_emac_recv(void *param, struct netif *netif, uint32_t len); + void *emac_link_input_data; + void *emac_link_state_data; + emac_link_input_cb_t emac_link_input_cb; + emac_link_state_change_cb_t emac_link_state_cb; + EMACMemoryManager *memory_manager; +}; +#endif /* RTW_EMAC_H_ */ +