Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #ifndef _LPC17XX_ETHERNET_H
Michael J. Spencer 2:1df0b61d3b5a 2 #define _LPC17XX_ETHERNET_H
Michael J. Spencer 2:1df0b61d3b5a 3
Michael J. Spencer 2:1df0b61d3b5a 4 #include "lpc17xx_emac.h"
Michael J. Spencer 2:1df0b61d3b5a 5
Michael J. Spencer 2:1df0b61d3b5a 6 #include "Module.h"
Michael J. Spencer 2:1df0b61d3b5a 7 #include "net_util.h"
Michael J. Spencer 2:1df0b61d3b5a 8
Michael J. Spencer 2:1df0b61d3b5a 9 #define EMAC_SMSC_8720A 0x0007C0F0
Michael J. Spencer 2:1df0b61d3b5a 10
Michael J. Spencer 2:1df0b61d3b5a 11 // SMSC 8720A special control/status register
Michael J. Spencer 2:1df0b61d3b5a 12 #define EMAC_PHY_REG_SCSR 0x1F
Michael J. Spencer 2:1df0b61d3b5a 13
Michael J. Spencer 2:1df0b61d3b5a 14 #define LPC17XX_MAX_PACKET 600
Michael J. Spencer 2:1df0b61d3b5a 15 #define LPC17XX_TXBUFS 4
Michael J. Spencer 2:1df0b61d3b5a 16 #define LPC17XX_RXBUFS 4
Michael J. Spencer 2:1df0b61d3b5a 17
Michael J. Spencer 2:1df0b61d3b5a 18 typedef struct {
Michael J. Spencer 2:1df0b61d3b5a 19 void* packet;
Michael J. Spencer 2:1df0b61d3b5a 20 uint32_t control;
Michael J. Spencer 2:1df0b61d3b5a 21 } packet_desc;
Michael J. Spencer 2:1df0b61d3b5a 22
Michael J. Spencer 2:1df0b61d3b5a 23 typedef struct {
Michael J. Spencer 2:1df0b61d3b5a 24 uint8_t buf[LPC17XX_RXBUFS][LPC17XX_MAX_PACKET];
Michael J. Spencer 2:1df0b61d3b5a 25 RX_Stat rxstat[LPC17XX_RXBUFS];
Michael J. Spencer 2:1df0b61d3b5a 26 packet_desc rxdesc[LPC17XX_RXBUFS];
Michael J. Spencer 2:1df0b61d3b5a 27 } _rxbuf_t;
Michael J. Spencer 2:1df0b61d3b5a 28
Michael J. Spencer 2:1df0b61d3b5a 29 typedef struct {
Michael J. Spencer 2:1df0b61d3b5a 30 uint8_t buf[LPC17XX_TXBUFS][LPC17XX_MAX_PACKET];
Michael J. Spencer 2:1df0b61d3b5a 31 TX_Stat txstat[LPC17XX_TXBUFS];
Michael J. Spencer 2:1df0b61d3b5a 32 packet_desc txdesc[LPC17XX_TXBUFS];
Michael J. Spencer 2:1df0b61d3b5a 33 } _txbuf_t;
Michael J. Spencer 2:1df0b61d3b5a 34
Michael J. Spencer 2:1df0b61d3b5a 35 class LPC17XX_Ethernet;
Michael J. Spencer 2:1df0b61d3b5a 36
Michael J. Spencer 2:1df0b61d3b5a 37 class LPC17XX_Ethernet : public Module, public NetworkInterface
Michael J. Spencer 2:1df0b61d3b5a 38 {
Michael J. Spencer 2:1df0b61d3b5a 39 public:
Michael J. Spencer 2:1df0b61d3b5a 40 LPC17XX_Ethernet();
Michael J. Spencer 2:1df0b61d3b5a 41
Michael J. Spencer 2:1df0b61d3b5a 42 void on_module_loaded();
Michael J. Spencer 2:1df0b61d3b5a 43 void on_idle(void*);
Michael J. Spencer 2:1df0b61d3b5a 44 void on_second_tick(void*);
Michael J. Spencer 2:1df0b61d3b5a 45
Michael J. Spencer 2:1df0b61d3b5a 46 void emac_init(void) __attribute__ ((optimize("O0")));
Michael J. Spencer 2:1df0b61d3b5a 47
Michael J. Spencer 2:1df0b61d3b5a 48 void set_mac(uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 49
Michael J. Spencer 2:1df0b61d3b5a 50 void irq(void);
Michael J. Spencer 2:1df0b61d3b5a 51
Michael J. Spencer 2:1df0b61d3b5a 52 bool _receive_frame(void *packet, int* size);
Michael J. Spencer 2:1df0b61d3b5a 53
Michael J. Spencer 2:1df0b61d3b5a 54 // NetworkInterface methods
Michael J. Spencer 2:1df0b61d3b5a 55 // void provide_net(netcore* n);
Michael J. Spencer 2:1df0b61d3b5a 56 bool can_read_packet(void);
Michael J. Spencer 2:1df0b61d3b5a 57 int read_packet(uint8_t**);
Michael J. Spencer 2:1df0b61d3b5a 58 void release_read_packet(uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 59 void periodical(int);
Michael J. Spencer 2:1df0b61d3b5a 60
Michael J. Spencer 2:1df0b61d3b5a 61 bool can_write_packet(void);
Michael J. Spencer 2:1df0b61d3b5a 62 int write_packet(uint8_t *, int);
Michael J. Spencer 2:1df0b61d3b5a 63
Michael J. Spencer 2:1df0b61d3b5a 64 void* request_packet_buffer(void);
Michael J. Spencer 2:1df0b61d3b5a 65
Michael J. Spencer 2:1df0b61d3b5a 66 // Encapsulator methods
Michael J. Spencer 2:1df0b61d3b5a 67 int receive(NetworkInterface* ni, NET_PACKET, int);
Michael J. Spencer 2:1df0b61d3b5a 68 int construct(NetworkInterface* ni, NET_PACKET, int);
Michael J. Spencer 2:1df0b61d3b5a 69 NET_PACKET get_new_packet_buffer(NetworkInterface*);
Michael J. Spencer 2:1df0b61d3b5a 70 NET_PAYLOAD get_payload_buffer(NET_PACKET);
Michael J. Spencer 2:1df0b61d3b5a 71 void set_payload_length(NET_PACKET, int);
Michael J. Spencer 2:1df0b61d3b5a 72
Michael J. Spencer 2:1df0b61d3b5a 73 static LPC17XX_Ethernet* instance;
Michael J. Spencer 2:1df0b61d3b5a 74
Michael J. Spencer 2:1df0b61d3b5a 75 private:
Michael J. Spencer 2:1df0b61d3b5a 76 static _rxbuf_t rxbuf;
Michael J. Spencer 2:1df0b61d3b5a 77 static _txbuf_t txbuf;
Michael J. Spencer 2:1df0b61d3b5a 78
Michael J. Spencer 2:1df0b61d3b5a 79 void check_interface();
Michael J. Spencer 2:1df0b61d3b5a 80 };
Michael J. Spencer 2:1df0b61d3b5a 81
Michael J. Spencer 2:1df0b61d3b5a 82 #endif /* _LPC17XX_ETHERNET_H */