The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
<>
Date:
Tue Mar 14 16:20:51 2017 +0000
Revision:
138:093f2bd7b9eb
Parent:
128:9bcdf88f62b0
Release 138 of the mbed library

Ports for Upcoming Targets


Fixes and Changes

3716: fix for issue #3715: correction in startup files for ARM and IAR, alignment of system_stm32f429xx.c files https://github.com/ARMmbed/mbed-os/pull/3716
3741: STM32 remove warning in hal_tick_32b.c file https://github.com/ARMmbed/mbed-os/pull/3741
3780: STM32L4 : Fix GPIO G port compatibility https://github.com/ARMmbed/mbed-os/pull/3780
3831: NCS36510: SPISLAVE enabled (Conflict resolved) https://github.com/ARMmbed/mbed-os/pull/3831
3836: Allow to redefine nRF's PSTORAGE_NUM_OF_PAGES outside of the mbed-os https://github.com/ARMmbed/mbed-os/pull/3836
3840: STM32: gpio SPEED - always set High Speed by default https://github.com/ARMmbed/mbed-os/pull/3840
3844: STM32 GPIO: Typo correction. Update comment (GPIO_IP_WITHOUT_BRR) https://github.com/ARMmbed/mbed-os/pull/3844
3850: STM32: change spi error to debug warning https://github.com/ARMmbed/mbed-os/pull/3850
3860: Define GPIO_IP_WITHOUT_BRR for xDot platform https://github.com/ARMmbed/mbed-os/pull/3860
3880: DISCO_F469NI: allow the use of CAN2 instance when CAN1 is not activated https://github.com/ARMmbed/mbed-os/pull/3880
3795: Fix pwm period calc https://github.com/ARMmbed/mbed-os/pull/3795
3828: STM32 CAN API: correct format and type https://github.com/ARMmbed/mbed-os/pull/3828
3842: TARGET_NRF: corrected spi_init() to properly handle re-initialization https://github.com/ARMmbed/mbed-os/pull/3842
3843: STM32L476xG: set APB2 clock to 80MHz (instead of 40MHz) https://github.com/ARMmbed/mbed-os/pull/3843
3879: NUCLEO_F446ZE: Add missing AnalogIn pins on PF_3, PF_5 and PF_10. https://github.com/ARMmbed/mbed-os/pull/3879
3902: Fix heap and stack size for NUCLEO_F746ZG https://github.com/ARMmbed/mbed-os/pull/3902
3829: can_write(): return error code when no tx mailboxes are available https://github.com/ARMmbed/mbed-os/pull/3829

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 128:9bcdf88f62b0 1 /* mbed Microcontroller Library
<> 128:9bcdf88f62b0 2 * Copyright (c) 2016 ARM Limited
<> 128:9bcdf88f62b0 3 *
<> 128:9bcdf88f62b0 4 * Licensed under the Apache License, Version 2.0 (the "License");
<> 128:9bcdf88f62b0 5 * you may not use this file except in compliance with the License.
<> 128:9bcdf88f62b0 6 * You may obtain a copy of the License at
<> 128:9bcdf88f62b0 7 *
<> 128:9bcdf88f62b0 8 * http://www.apache.org/licenses/LICENSE-2.0
<> 128:9bcdf88f62b0 9 *
<> 128:9bcdf88f62b0 10 * Unless required by applicable law or agreed to in writing, software
<> 128:9bcdf88f62b0 11 * distributed under the License is distributed on an "AS IS" BASIS,
<> 128:9bcdf88f62b0 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
<> 128:9bcdf88f62b0 13 * See the License for the specific language governing permissions and
<> 128:9bcdf88f62b0 14 * limitations under the License.
<> 128:9bcdf88f62b0 15 */
<> 128:9bcdf88f62b0 16
<> 128:9bcdf88f62b0 17 #ifndef MBED_EMAC_API_H
<> 128:9bcdf88f62b0 18 #define MBED_EMAC_API_H
<> 128:9bcdf88f62b0 19
<> 128:9bcdf88f62b0 20 #if DEVICE_EMAC
<> 128:9bcdf88f62b0 21
<> 128:9bcdf88f62b0 22 #include <stdbool.h>
<> 128:9bcdf88f62b0 23 #include "emac_stack_mem.h"
<> 128:9bcdf88f62b0 24
<> 128:9bcdf88f62b0 25 typedef struct emac_interface emac_interface_t;
<> 128:9bcdf88f62b0 26
<> 128:9bcdf88f62b0 27 /**
<> 128:9bcdf88f62b0 28 * EmacInterface
<> 128:9bcdf88f62b0 29 *
<> 128:9bcdf88f62b0 30 * This interface should be used to abstract low level access to networking hardware
<> 128:9bcdf88f62b0 31 */
<> 128:9bcdf88f62b0 32
<> 128:9bcdf88f62b0 33 /**
<> 128:9bcdf88f62b0 34 * Callback to be register with Emac interface and to be called fore received packets
<> 128:9bcdf88f62b0 35 *
<> 128:9bcdf88f62b0 36 * @param data Arbitrary user data (IP stack)
<> 128:9bcdf88f62b0 37 * @param buf Received data
<> 128:9bcdf88f62b0 38 */
<> 128:9bcdf88f62b0 39 typedef void (*emac_link_input_fn)(void *data, emac_stack_mem_chain_t *buf);
<> 128:9bcdf88f62b0 40
<> 128:9bcdf88f62b0 41 /**
<> 128:9bcdf88f62b0 42 * Callback to be register with Emac interface and to be called for link status changes
<> 128:9bcdf88f62b0 43 *
<> 128:9bcdf88f62b0 44 * @param data Arbitrary user data (IP stack)
<> 128:9bcdf88f62b0 45 * @param up Link status
<> 128:9bcdf88f62b0 46 */
<> 128:9bcdf88f62b0 47 typedef void (*emac_link_state_change_fn)(void *data, bool up);
<> 128:9bcdf88f62b0 48
<> 128:9bcdf88f62b0 49 /**
<> 128:9bcdf88f62b0 50 * Return maximum transmission unit
<> 128:9bcdf88f62b0 51 *
<> 128:9bcdf88f62b0 52 * @param emac Emac interface
<> 128:9bcdf88f62b0 53 * @return MTU in bytes
<> 128:9bcdf88f62b0 54 */
<> 128:9bcdf88f62b0 55 typedef uint32_t (*emac_get_mtu_size_fn)(emac_interface_t *emac);
<> 128:9bcdf88f62b0 56
<> 128:9bcdf88f62b0 57 /**
<> 128:9bcdf88f62b0 58 * Return interface name
<> 128:9bcdf88f62b0 59 *
<> 128:9bcdf88f62b0 60 * @param emac Emac interface
<> 128:9bcdf88f62b0 61 * @param name Pointer to where the name should be written
<> 128:9bcdf88f62b0 62 * @param size Maximum number of character to copy
<> 128:9bcdf88f62b0 63 */
<> 128:9bcdf88f62b0 64 typedef void (*emac_get_ifname_fn)(emac_interface_t *emac, char *name, uint8_t size);
<> 128:9bcdf88f62b0 65
<> 128:9bcdf88f62b0 66 /**
<> 128:9bcdf88f62b0 67 * Returns size of the underlying interface HW address size
<> 128:9bcdf88f62b0 68 *
<> 128:9bcdf88f62b0 69 * @param emac Emac interface
<> 128:9bcdf88f62b0 70 * @return HW address size in bytes
<> 128:9bcdf88f62b0 71 */
<> 128:9bcdf88f62b0 72 typedef uint8_t (*emac_get_hwaddr_size_fn)(emac_interface_t *emac);
<> 128:9bcdf88f62b0 73
<> 128:9bcdf88f62b0 74 /**
<> 128:9bcdf88f62b0 75 * Return interface hw address
<> 128:9bcdf88f62b0 76 *
<> 128:9bcdf88f62b0 77 * Copies HW address to provided memory, @param addr has to be of correct size see @a get_hwaddr_size
<> 128:9bcdf88f62b0 78 *
<> 128:9bcdf88f62b0 79 * @param emac Emac interface
<> 128:9bcdf88f62b0 80 * @param addr HW address for underlying interface
<> 128:9bcdf88f62b0 81 */
<> 128:9bcdf88f62b0 82 typedef void (*emac_get_hwaddr_fn)(emac_interface_t *emac, uint8_t *addr);
<> 128:9bcdf88f62b0 83
<> 128:9bcdf88f62b0 84 /**
<> 128:9bcdf88f62b0 85 * Set HW address for interface
<> 128:9bcdf88f62b0 86 *
<> 128:9bcdf88f62b0 87 * Provided address has to be of correct size, see @a get_hwaddr_size
<> 128:9bcdf88f62b0 88 *
<> 128:9bcdf88f62b0 89 * @param emac Emac interface
<> 128:9bcdf88f62b0 90 * @param addr Address to be set
<> 128:9bcdf88f62b0 91 */
<> 128:9bcdf88f62b0 92 typedef void (*emac_set_hwaddr_fn)(emac_interface_t *emac, uint8_t *addr);
<> 128:9bcdf88f62b0 93
<> 128:9bcdf88f62b0 94 /**
<> 128:9bcdf88f62b0 95 * Sends the packet over the link
<> 128:9bcdf88f62b0 96 *
<> 128:9bcdf88f62b0 97 * That can not be called from an interrupt context.
<> 128:9bcdf88f62b0 98 *
<> 128:9bcdf88f62b0 99 * @param emac Emac interface
<> 128:9bcdf88f62b0 100 * @param buf Packet to be send
<> 128:9bcdf88f62b0 101 * @return True if the packet was send successfully, False otherwise
<> 128:9bcdf88f62b0 102 */
<> 128:9bcdf88f62b0 103 typedef bool (*emac_link_out_fn)(emac_interface_t *emac, emac_stack_mem_t *buf);
<> 128:9bcdf88f62b0 104
<> 128:9bcdf88f62b0 105 /**
<> 128:9bcdf88f62b0 106 * Initializes the HW
<> 128:9bcdf88f62b0 107 *
<> 128:9bcdf88f62b0 108 * @return True on success, False in case of an error.
<> 128:9bcdf88f62b0 109 */
<> 128:9bcdf88f62b0 110 typedef bool (*emac_power_up_fn)(emac_interface_t *emac);
<> 128:9bcdf88f62b0 111
<> 128:9bcdf88f62b0 112 /**
<> 128:9bcdf88f62b0 113 * Deinitializes the HW
<> 128:9bcdf88f62b0 114 *
<> 128:9bcdf88f62b0 115 * @param emac Emac interface
<> 128:9bcdf88f62b0 116 */
<> 128:9bcdf88f62b0 117 typedef void (*emac_power_down_fn)(emac_interface_t *emac);
<> 128:9bcdf88f62b0 118
<> 128:9bcdf88f62b0 119 /**
<> 128:9bcdf88f62b0 120 * Sets a callback that needs to be called for packets received for that interface
<> 128:9bcdf88f62b0 121 *
<> 128:9bcdf88f62b0 122 * @param emac Emac interface
<> 128:9bcdf88f62b0 123 * @param input_cb Function to be register as a callback
<> 128:9bcdf88f62b0 124 * @param data Arbitrary user data to be passed to the callback
<> 128:9bcdf88f62b0 125 */
<> 128:9bcdf88f62b0 126 typedef void (*emac_set_link_input_cb_fn)(emac_interface_t *emac, emac_link_input_fn input_cb, void *data);
<> 128:9bcdf88f62b0 127
<> 128:9bcdf88f62b0 128 /**
<> 128:9bcdf88f62b0 129 * Sets a callback that needs to be called on link status changes for given interface
<> 128:9bcdf88f62b0 130 *
<> 128:9bcdf88f62b0 131 * @param emac Emac interface
<> 128:9bcdf88f62b0 132 * @param state_cb Function to be register as a callback
<> 128:9bcdf88f62b0 133 * @param data Arbitrary user data to be passed to the callback
<> 128:9bcdf88f62b0 134 */
<> 128:9bcdf88f62b0 135 typedef void (*emac_set_link_state_cb_fn)(emac_interface_t *emac, emac_link_state_change_fn state_cb, void *data);
<> 128:9bcdf88f62b0 136
<> 128:9bcdf88f62b0 137 typedef struct emac_interface_ops {
<> 128:9bcdf88f62b0 138 emac_get_mtu_size_fn get_mtu_size;
<> 128:9bcdf88f62b0 139 emac_get_ifname_fn get_ifname;
<> 128:9bcdf88f62b0 140 emac_get_hwaddr_size_fn get_hwaddr_size;
<> 128:9bcdf88f62b0 141 emac_get_hwaddr_fn get_hwaddr;
<> 128:9bcdf88f62b0 142 emac_set_hwaddr_fn set_hwaddr;
<> 128:9bcdf88f62b0 143 emac_link_out_fn link_out;
<> 128:9bcdf88f62b0 144 emac_power_up_fn power_up;
<> 128:9bcdf88f62b0 145 emac_power_down_fn power_down;
<> 128:9bcdf88f62b0 146 emac_set_link_input_cb_fn set_link_input_cb;
<> 128:9bcdf88f62b0 147 emac_set_link_state_cb_fn set_link_state_cb;
<> 128:9bcdf88f62b0 148 } emac_interface_ops_t;
<> 128:9bcdf88f62b0 149
<> 128:9bcdf88f62b0 150 typedef struct emac_interface {
<> 128:9bcdf88f62b0 151 const emac_interface_ops_t ops;
<> 128:9bcdf88f62b0 152 void *hw;
<> 128:9bcdf88f62b0 153 } emac_interface_t;
<> 128:9bcdf88f62b0 154
<> 128:9bcdf88f62b0 155 #else
<> 128:9bcdf88f62b0 156
<> 128:9bcdf88f62b0 157 typedef void *emac_interface_t;
<> 128:9bcdf88f62b0 158
<> 128:9bcdf88f62b0 159 #endif /* DEVICE_EMAC */
<> 128:9bcdf88f62b0 160 #endif /* MBED_EMAC_API_H */