mbed-dev-f303

Committer:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4
Date:
Tue Jun 14 09:21:18 2022 +0000
Revision:
0:bdf663c61a82
lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 1 /* mbed Microcontroller Library
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 2 * Copyright (c) 2006-2013 ARM Limited
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 3 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 4 * Licensed under the Apache License, Version 2.0 (the "License");
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 5 * you may not use this file except in compliance with the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 6 * You may obtain a copy of the License at
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 7 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 8 * http://www.apache.org/licenses/LICENSE-2.0
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 9 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 10 * Unless required by applicable law or agreed to in writing, software
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 11 * distributed under the License is distributed on an "AS IS" BASIS,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 13 * See the License for the specific language governing permissions and
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 14 * limitations under the License.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 15 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 16 #ifndef MBED_ETHERNET_H
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 17 #define MBED_ETHERNET_H
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 18
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 19 #include "platform/platform.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 20 #include "platform/NonCopyable.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 21
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 22 #if defined (DEVICE_ETHERNET) || defined(DOXYGEN_ONLY)
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 23
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 24 namespace mbed {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 25 /** \addtogroup drivers */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 26
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 27 /** An ethernet interface, to use with the ethernet pins.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 28 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 29 * @note Synchronization level: Not protected
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 30 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 31 * Example:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 32 * @code
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 33 * // Read destination and source from every ethernet packet
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 34 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 35 * #include "mbed.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 36 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 37 * Ethernet eth;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 38 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 39 * int main() {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 40 * char buf[0x600];
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 41 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 42 * while(1) {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 43 * int size = eth.receive();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 44 * if(size > 0) {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 45 * eth.read(buf, size);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 46 * printf("Destination: %02X:%02X:%02X:%02X:%02X:%02X\n",
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 47 * buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 48 * printf("Source: %02X:%02X:%02X:%02X:%02X:%02X\n",
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 49 * buf[6], buf[7], buf[8], buf[9], buf[10], buf[11]);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 50 * }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 51 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 52 * wait(1);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 53 * }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 54 * }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 55 * @endcode
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 56 * @ingroup drivers
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 57 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 58 class Ethernet : private NonCopyable<Ethernet> {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 59
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 60 public:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 61
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 62 /** Initialise the ethernet interface.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 63 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 64 Ethernet();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 65
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 66 /** Powers the hardware down.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 67 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 68 virtual ~Ethernet();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 69
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 70 enum Mode {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 71 AutoNegotiate,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 72 HalfDuplex10,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 73 FullDuplex10,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 74 HalfDuplex100,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 75 FullDuplex100
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 76 };
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 77
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 78 /** Writes into an outgoing ethernet packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 79 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 80 * It will append size bytes of data to the previously written bytes.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 81 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 82 * @param data An array to write.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 83 * @param size The size of data.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 84 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 85 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 86 * The number of written bytes.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 87 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 88 int write(const char *data, int size);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 89
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 90 /** Send an outgoing ethernet packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 91 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 92 * After filling in the data in an ethernet packet it must be send.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 93 * Send will provide a new packet to write to.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 94 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 95 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 96 * 0 if the sending was failed,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 97 * or the size of the packet successfully sent.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 98 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 99 int send();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 100
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 101 /** Recevies an arrived ethernet packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 102 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 103 * Receiving an ethernet packet will drop the last received ethernet packet
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 104 * and make a new ethernet packet ready to read.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 105 * If no ethernet packet is arrived it will return 0.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 106 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 107 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 108 * 0 if no ethernet packet is arrived,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 109 * or the size of the arrived packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 110 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 111 int receive();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 112
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 113 /** Read from an recevied ethernet packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 114 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 115 * After receive returned a number bigger than 0 it is
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 116 * possible to read bytes from this packet.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 117 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 118 * @param data Pointer to data packet
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 119 * @param size Size of data to be read.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 120 * @returns The number of byte read.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 121 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 122 * @note It is possible to use read multiple times.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 123 * Each time read will start reading after the last read byte before.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 124 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 125 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 126 int read(char *data, int size);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 127
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 128 /** Gives the ethernet address of the mbed.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 129 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 130 * @param mac Must be a pointer to a 6 byte char array to copy the ethernet address in.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 131 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 132 void address(char *mac);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 133
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 134 /** Returns if an ethernet link is pressent or not. It takes a wile after Ethernet initializion to show up.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 135 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 136 * @returns
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 137 * 0 if no ethernet link is pressent,
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 138 * 1 if an ethernet link is pressent.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 139 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 140 * Example:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 141 * @code
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 142 * // Using the Ethernet link function
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 143 * #include "mbed.h"
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 144 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 145 * Ethernet eth;
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 146 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 147 * int main() {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 148 * wait(1); // Needed after startup.
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 149 * if (eth.link()) {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 150 * printf("online\n");
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 151 * } else {
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 152 * printf("offline\n");
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 153 * }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 154 * }
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 155 * @endcode
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 156 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 157 int link();
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 158
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 159 /** Sets the speed and duplex parameters of an ethernet link
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 160 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 161 * - AutoNegotiate Auto negotiate speed and duplex
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 162 * - HalfDuplex10 10 Mbit, half duplex
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 163 * - FullDuplex10 10 Mbit, full duplex
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 164 * - HalfDuplex100 100 Mbit, half duplex
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 165 * - FullDuplex100 100 Mbit, full duplex
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 166 *
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 167 * @param mode the speed and duplex mode to set the link to:
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 168 */
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 169 void set_link(Mode mode);
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 170 };
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 171
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 172 } // namespace mbed
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 173
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 174 #endif
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 175
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 176 #endif
abe5b02d-a2d4-4fe9-818e-c4e57c809ea4 0:bdf663c61a82 177