Dependencies:   mbed

Committer:
robertcook
Date:
Wed Jun 13 18:39:46 2012 +0000
Revision:
0:32a0996dff0f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
robertcook 0:32a0996dff0f 1 /*
robertcook 0:32a0996dff0f 2 * Echo server
robertcook 0:32a0996dff0f 3 * Listens on TCP and UDP ports 7 for any incoming connections
robertcook 0:32a0996dff0f 4 * Re-transmits any incoming bytes
robertcook 0:32a0996dff0f 5 */
robertcook 0:32a0996dff0f 6
robertcook 0:32a0996dff0f 7 #include "mbed.h"
robertcook 0:32a0996dff0f 8 #include "EthernetNetIf.h"
robertcook 0:32a0996dff0f 9
robertcook 0:32a0996dff0f 10 #include "EchoServer.h"
robertcook 0:32a0996dff0f 11
robertcook 0:32a0996dff0f 12 // Our Ethernet interface
robertcook 0:32a0996dff0f 13 EthernetNetIf eth;
robertcook 0:32a0996dff0f 14 // Our Echo server
robertcook 0:32a0996dff0f 15 EchoServer server;
robertcook 0:32a0996dff0f 16
robertcook 0:32a0996dff0f 17 #define byte char
robertcook 0:32a0996dff0f 18
robertcook 0:32a0996dff0f 19 #define ScreenWidth 32
robertcook 0:32a0996dff0f 20 #define ScreenHeight 15
robertcook 0:32a0996dff0f 21
robertcook 0:32a0996dff0f 22 #define HTTPChunkSize 1024
robertcook 0:32a0996dff0f 23
robertcook 0:32a0996dff0f 24 #define ScreenBufferSize ScreenWidth*ScreenHeight*3
robertcook 0:32a0996dff0f 25
robertcook 0:32a0996dff0f 26 bool drawReadyFlag = false;
robertcook 0:32a0996dff0f 27
robertcook 0:32a0996dff0f 28 typedef struct {
robertcook 0:32a0996dff0f 29 byte blue;
robertcook 0:32a0996dff0f 30 byte green;
robertcook 0:32a0996dff0f 31 byte red;
robertcook 0:32a0996dff0f 32 } color;
robertcook 0:32a0996dff0f 33
robertcook 0:32a0996dff0f 34 unsigned int fileFrameCount;
robertcook 0:32a0996dff0f 35
robertcook 0:32a0996dff0f 36 byte screenBuf[ScreenBufferSize];
robertcook 0:32a0996dff0f 37
robertcook 0:32a0996dff0f 38 Serial pc(USBTX, USBRX);
robertcook 0:32a0996dff0f 39
robertcook 0:32a0996dff0f 40 SPI spi(p5, NC, p7); // mosi, miso, sclk
robertcook 0:32a0996dff0f 41
robertcook 0:32a0996dff0f 42 void writePixel(int x, int y) {
robertcook 0:32a0996dff0f 43
robertcook 0:32a0996dff0f 44 spi.write(screenBuf[(x*ScreenHeight+y)*3]);
robertcook 0:32a0996dff0f 45 spi.write(screenBuf[(x*ScreenHeight+y)*3+1]);
robertcook 0:32a0996dff0f 46 spi.write(screenBuf[(x*ScreenHeight+y)*3+2]);
robertcook 0:32a0996dff0f 47
robertcook 0:32a0996dff0f 48 }
robertcook 0:32a0996dff0f 49
robertcook 0:32a0996dff0f 50
robertcook 0:32a0996dff0f 51 void updateDisplay() {
robertcook 0:32a0996dff0f 52 for (int y = ScreenHeight-1; y >= 0; y--) {
robertcook 0:32a0996dff0f 53 if (y % 2 == 0) {
robertcook 0:32a0996dff0f 54 for (int x = 0; x < ScreenWidth; x++)
robertcook 0:32a0996dff0f 55 writePixel(x,y);
robertcook 0:32a0996dff0f 56 }
robertcook 0:32a0996dff0f 57 else {
robertcook 0:32a0996dff0f 58 for (int x = ScreenWidth-1; x >= 0; x--)
robertcook 0:32a0996dff0f 59 writePixel(x,y);
robertcook 0:32a0996dff0f 60 }
robertcook 0:32a0996dff0f 61 }
robertcook 0:32a0996dff0f 62 wait_us(800);
robertcook 0:32a0996dff0f 63 }
robertcook 0:32a0996dff0f 64
robertcook 0:32a0996dff0f 65
robertcook 0:32a0996dff0f 66
robertcook 0:32a0996dff0f 67 void hexDump(byte *buf, unsigned long len, int wid) {
robertcook 0:32a0996dff0f 68
robertcook 0:32a0996dff0f 69 for (unsigned long i = 0; i < len; i++) {
robertcook 0:32a0996dff0f 70 if (!(i % wid)) pc.printf("\n");
robertcook 0:32a0996dff0f 71 else if (!(i % 4)) pc.printf(" ");
robertcook 0:32a0996dff0f 72
robertcook 0:32a0996dff0f 73 pc.printf("%02x", buf[i]);
robertcook 0:32a0996dff0f 74 }
robertcook 0:32a0996dff0f 75 pc.printf("\n");
robertcook 0:32a0996dff0f 76 }
robertcook 0:32a0996dff0f 77
robertcook 0:32a0996dff0f 78
robertcook 0:32a0996dff0f 79 /*
robertcook 0:32a0996dff0f 80 Function: main
robertcook 0:32a0996dff0f 81
robertcook 0:32a0996dff0f 82 Sets up the Ethernet interface using DHCP, reports the assigned
robertcook 0:32a0996dff0f 83 IP address via serial, binds the Echo server to port 7 on
robertcook 0:32a0996dff0f 84 TCP and UDP and then sits in a loop calling Net::poll() to
robertcook 0:32a0996dff0f 85 keep the network stack doing its thing
robertcook 0:32a0996dff0f 86 */
robertcook 0:32a0996dff0f 87 int main() {
robertcook 0:32a0996dff0f 88 printf("\r\nSetting up...\r\n");
robertcook 0:32a0996dff0f 89 EthernetErr ethErr = eth.setup();
robertcook 0:32a0996dff0f 90 if (ethErr) {
robertcook 0:32a0996dff0f 91 printf("Error %d in setup.\n", ethErr);
robertcook 0:32a0996dff0f 92 return -1;
robertcook 0:32a0996dff0f 93 }
robertcook 0:32a0996dff0f 94 IpAddr ip = eth.getIp();
robertcook 0:32a0996dff0f 95 printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
robertcook 0:32a0996dff0f 96
robertcook 0:32a0996dff0f 97 server.bind();
robertcook 0:32a0996dff0f 98
robertcook 0:32a0996dff0f 99 printf("Entering while loop Net::poll()ing\r\n");
robertcook 0:32a0996dff0f 100 while (1) {
robertcook 0:32a0996dff0f 101 Net::poll();
robertcook 0:32a0996dff0f 102 if (drawReadyFlag) {
robertcook 0:32a0996dff0f 103 updateDisplay();
robertcook 0:32a0996dff0f 104 drawReadyFlag = false;
robertcook 0:32a0996dff0f 105 }
robertcook 0:32a0996dff0f 106 }
robertcook 0:32a0996dff0f 107 }