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