mbed libraries for KL25Z

Dependents:   FRDM_RGBLED

Committer:
emilmont
Date:
Fri Nov 09 11:33:53 2012 +0000
Revision:
8:c14af7958ef5
Parent:
2:e9a661555b58
Child:
9:663789d7729f
SPI driver; ADC driver; DAC driver; microlib support; general bugfixing

Who changed what in which revision?

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