Nathan Argetsinger
/
aaa_UDP_pixel_server
example make build
Fork of TCPSocket_Example by
main.cpp@2:028e56dcc064, 2017-07-14 (annotated)
- Committer:
- nargetdev
- Date:
- Fri Jul 14 16:06:58 2017 +0000
- Revision:
- 2:028e56dcc064
- Parent:
- 1:965d7fb768b6
- Child:
- 3:70182dad8745
functioning red-green server
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mab5449 | 0:6b383744246e | 1 | #include "mbed.h" |
mab5449 | 0:6b383744246e | 2 | #include "EthernetInterface.h" |
mab5449 | 0:6b383744246e | 3 | |
nargetdev | 2:028e56dcc064 | 4 | #define LED_NUM 23 |
nargetdev | 2:028e56dcc064 | 5 | #define LED_GLOBAL 4 // brightness 0-31 |
nargetdev | 2:028e56dcc064 | 6 | #define LED_FREQ 500000 // spi |
nargetdev | 2:028e56dcc064 | 7 | |
nargetdev | 2:028e56dcc064 | 8 | #define SPI_MOSI PTC6 |
nargetdev | 2:028e56dcc064 | 9 | //#define SPI_MOSI PTD2 |
nargetdev | 2:028e56dcc064 | 10 | #define SPI_MISO PTC7 |
nargetdev | 2:028e56dcc064 | 11 | #define SPI_SCK PTC5 |
nargetdev | 2:028e56dcc064 | 12 | //#define SPI_SCK PTD1 |
nargetdev | 2:028e56dcc064 | 13 | |
nargetdev | 2:028e56dcc064 | 14 | |
nargetdev | 2:028e56dcc064 | 15 | SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); |
nargetdev | 2:028e56dcc064 | 16 | DigitalOut myled(LED1); |
nargetdev | 2:028e56dcc064 | 17 | DigitalOut myled1(LED2); |
nargetdev | 2:028e56dcc064 | 18 | |
nargetdev | 2:028e56dcc064 | 19 | int led_buf[LED_NUM]; |
nargetdev | 2:028e56dcc064 | 20 | |
nargetdev | 2:028e56dcc064 | 21 | void dotStar () { |
nargetdev | 2:028e56dcc064 | 22 | int i; |
nargetdev | 2:028e56dcc064 | 23 | |
nargetdev | 2:028e56dcc064 | 24 | // start frame |
nargetdev | 2:028e56dcc064 | 25 | for (i = 0; i < 4; i ++) { |
nargetdev | 2:028e56dcc064 | 26 | spi.write(0); |
nargetdev | 2:028e56dcc064 | 27 | } |
nargetdev | 2:028e56dcc064 | 28 | // led frame |
nargetdev | 2:028e56dcc064 | 29 | for (i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 30 | spi.write((7<<5) | LED_GLOBAL); |
nargetdev | 2:028e56dcc064 | 31 | spi.write((led_buf[i] >> 16) & 0xff); // B |
nargetdev | 2:028e56dcc064 | 32 | spi.write((led_buf[i] >> 8) & 0xff); // G |
nargetdev | 2:028e56dcc064 | 33 | spi.write(led_buf[i] & 0xff); // R |
nargetdev | 2:028e56dcc064 | 34 | } |
nargetdev | 2:028e56dcc064 | 35 | // end frame |
nargetdev | 2:028e56dcc064 | 36 | for (i = 0; i < 4; i ++) { |
nargetdev | 2:028e56dcc064 | 37 | spi.write(1); |
nargetdev | 2:028e56dcc064 | 38 | } |
nargetdev | 2:028e56dcc064 | 39 | } |
nargetdev | 2:028e56dcc064 | 40 | |
mab5449 | 0:6b383744246e | 41 | // Network interface |
mab5449 | 0:6b383744246e | 42 | EthernetInterface net; |
mab5449 | 0:6b383744246e | 43 | |
nargetdev | 2:028e56dcc064 | 44 | void dot_red(){ |
nargetdev | 2:028e56dcc064 | 45 | for (int i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 46 | // int c = ((color + i) % 7) + 1; |
nargetdev | 2:028e56dcc064 | 47 | led_buf[i] = 0xff0000; |
nargetdev | 2:028e56dcc064 | 48 | } |
nargetdev | 2:028e56dcc064 | 49 | dotStar(); |
nargetdev | 2:028e56dcc064 | 50 | } |
nargetdev | 2:028e56dcc064 | 51 | void dot_blue(){ |
nargetdev | 2:028e56dcc064 | 52 | for (int i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 53 | // int c = ((color + i) % 7) + 1; |
nargetdev | 2:028e56dcc064 | 54 | led_buf[i] = 0x00ff00; |
nargetdev | 2:028e56dcc064 | 55 | } |
nargetdev | 2:028e56dcc064 | 56 | dotStar(); |
nargetdev | 2:028e56dcc064 | 57 | } |
nargetdev | 2:028e56dcc064 | 58 | void dot_green(){ |
nargetdev | 2:028e56dcc064 | 59 | for (int i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 60 | // int c = ((color + i) % 7) + 1; |
nargetdev | 2:028e56dcc064 | 61 | led_buf[i] = 0x0000ff; |
nargetdev | 2:028e56dcc064 | 62 | } |
nargetdev | 2:028e56dcc064 | 63 | dotStar(); |
nargetdev | 2:028e56dcc064 | 64 | } |
nargetdev | 2:028e56dcc064 | 65 | |
nargetdev | 2:028e56dcc064 | 66 | |
mab5449 | 0:6b383744246e | 67 | // Socket demo |
mab5449 | 0:6b383744246e | 68 | int main() { |
mab5449 | 0:6b383744246e | 69 | // Bring up the ethernet interface |
mab5449 | 0:6b383744246e | 70 | printf("Ethernet socket example\n"); |
mab5449 | 0:6b383744246e | 71 | net.connect(); |
nargetdev | 2:028e56dcc064 | 72 | |
nargetdev | 2:028e56dcc064 | 73 | // needed vars |
nargetdev | 2:028e56dcc064 | 74 | int i, c; |
nargetdev | 2:028e56dcc064 | 75 | int color = 1; |
nargetdev | 2:028e56dcc064 | 76 | myled1 = 0; |
nargetdev | 2:028e56dcc064 | 77 | myled = 1; |
nargetdev | 2:028e56dcc064 | 78 | spi.frequency(LED_FREQ); |
nargetdev | 2:028e56dcc064 | 79 | |
nargetdev | 2:028e56dcc064 | 80 | // first run of led color out: BLUE |
nargetdev | 2:028e56dcc064 | 81 | for (int i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 82 | c = ((color + i) % 7) + 1; |
nargetdev | 2:028e56dcc064 | 83 | led_buf[i] = 0xffff00; |
nargetdev | 2:028e56dcc064 | 84 | } |
nargetdev | 2:028e56dcc064 | 85 | dotStar(); |
nargetdev | 2:028e56dcc064 | 86 | myled = !myled; |
nargetdev | 2:028e56dcc064 | 87 | myled1 = !myled1; |
nargetdev | 2:028e56dcc064 | 88 | color ++; |
nargetdev | 2:028e56dcc064 | 89 | if (color > 7) color = 1; |
nargetdev | 2:028e56dcc064 | 90 | wait(0.2); |
nargetdev | 2:028e56dcc064 | 91 | |
mab5449 | 0:6b383744246e | 92 | // Show the network address |
mab5449 | 0:6b383744246e | 93 | const char *ip = net.get_ip_address(); |
mab5449 | 0:6b383744246e | 94 | printf("IP address is: %s\n", ip ? ip : "No IP"); |
mab5449 | 0:6b383744246e | 95 | |
mab5449 | 0:6b383744246e | 96 | // Open a socket on the network interface, and create a TCP connection to mbed.org |
nargetdev | 2:028e56dcc064 | 97 | UDPSocket socket; |
mab5449 | 0:6b383744246e | 98 | socket.open(&net); |
nargetdev | 2:028e56dcc064 | 99 | socket.connect("10.200.1.20", 4242); |
mab5449 | 0:6b383744246e | 100 | |
mab5449 | 0:6b383744246e | 101 | // Send a simple http request |
sarahmarshy | 1:965d7fb768b6 | 102 | char sbuffer[] = "GET / HTTP/1.1\r\nHost: www.arm.com\r\n\r\n"; |
mab5449 | 0:6b383744246e | 103 | int scount = socket.send(sbuffer, sizeof sbuffer); |
mab5449 | 0:6b383744246e | 104 | printf("sent %d [%.*s]\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer); |
mab5449 | 0:6b383744246e | 105 | |
mab5449 | 0:6b383744246e | 106 | // Recieve a simple http response and print out the response line |
mab5449 | 0:6b383744246e | 107 | char rbuffer[64]; |
mab5449 | 0:6b383744246e | 108 | int rcount = socket.recv(rbuffer, sizeof rbuffer); |
mab5449 | 0:6b383744246e | 109 | printf("recv %d [%.*s]\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer); |
mab5449 | 0:6b383744246e | 110 | |
nargetdev | 2:028e56dcc064 | 111 | for (i = 0; i < LED_NUM; i ++) { |
nargetdev | 2:028e56dcc064 | 112 | c = ((color + i) % 7) + 1; |
nargetdev | 2:028e56dcc064 | 113 | led_buf[i] = 0x0000ff; |
nargetdev | 2:028e56dcc064 | 114 | } |
nargetdev | 2:028e56dcc064 | 115 | dotStar(); |
nargetdev | 2:028e56dcc064 | 116 | myled = !myled; |
nargetdev | 2:028e56dcc064 | 117 | myled1 = !myled1; |
nargetdev | 2:028e56dcc064 | 118 | color ++; |
nargetdev | 2:028e56dcc064 | 119 | if (color > 7) color = 1; |
nargetdev | 2:028e56dcc064 | 120 | wait(0.2); |
nargetdev | 2:028e56dcc064 | 121 | |
nargetdev | 2:028e56dcc064 | 122 | // Ok hell yea. Connection established, enter main loop serving artnet |
nargetdev | 2:028e56dcc064 | 123 | while(1) { |
nargetdev | 2:028e56dcc064 | 124 | // get a command |
nargetdev | 2:028e56dcc064 | 125 | char rbuffer[64]; |
nargetdev | 2:028e56dcc064 | 126 | int rcount = socket.recv(rbuffer, sizeof rbuffer); |
nargetdev | 2:028e56dcc064 | 127 | |
nargetdev | 2:028e56dcc064 | 128 | // service it |
nargetdev | 2:028e56dcc064 | 129 | switch (rbuffer[0]) { |
nargetdev | 2:028e56dcc064 | 130 | case 'r': |
nargetdev | 2:028e56dcc064 | 131 | NVIC_SystemReset(); |
nargetdev | 2:028e56dcc064 | 132 | break; |
nargetdev | 2:028e56dcc064 | 133 | case 'g': |
nargetdev | 2:028e56dcc064 | 134 | dot_green(); |
nargetdev | 2:028e56dcc064 | 135 | break; |
nargetdev | 2:028e56dcc064 | 136 | case 'b': |
nargetdev | 2:028e56dcc064 | 137 | dot_blue(); |
nargetdev | 2:028e56dcc064 | 138 | break; |
nargetdev | 2:028e56dcc064 | 139 | } |
nargetdev | 2:028e56dcc064 | 140 | } |
mab5449 | 0:6b383744246e | 141 | // Close the socket to return its memory and bring down the network interface |
mab5449 | 0:6b383744246e | 142 | socket.close(); |
mab5449 | 0:6b383744246e | 143 | |
mab5449 | 0:6b383744246e | 144 | // Bring down the ethernet interface |
mab5449 | 0:6b383744246e | 145 | net.disconnect(); |
mab5449 | 0:6b383744246e | 146 | printf("Done\n"); |
mab5449 | 0:6b383744246e | 147 | } |