mbed library sources

Dependents:   FRDM-KL46Z_LCD_Test FRDM-KL46Z_LCD_Test FRDM-KL46Z_Plantilla FRDM-KL46Z_Plantilla ... more

Committer:
ebrus
Date:
Thu Jul 28 15:56:34 2016 +0000
Revision:
0:6bc4ac881c8e
1;

Who changed what in which revision?

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