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:
187:0387e8f68319
mbed library release version 165

Who changed what in which revision?

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