Christopher Haster / mbed-hal

Dependencies:   target-freescale

Fork of mbed-hal by Morpheus

Committer:
screamer
Date:
Wed Mar 23 21:36:09 2016 +0000
Revision:
0:9c59db1fbc9e
Initial revision

Who changed what in which revision?

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