Seongbin Lim
/
sb_first_project
This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.
main.cpp@140:2252b2df4bc6, 2020-06-02 (annotated)
- Committer:
- sb8718
- Date:
- Tue Jun 02 01:43:23 2020 +0000
- Revision:
- 140:2252b2df4bc6
- Parent:
- 138:e829be898713
- Child:
- 141:ba61e3c64a6d
TCP
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sb8718 | 109:5274dd9bebe1 | 1 | #include "mbed.h" |
sb8718 | 140:2252b2df4bc6 | 2 | |
sb8718 | 140:2252b2df4bc6 | 3 | #define SERVER_IP "192.168.0.53" |
sb8718 | 137:81b5a1672c6a | 4 | #define SERVER_PORT 50000 |
sb8718 | 140:2252b2df4bc6 | 5 | |
sb8718 | 137:81b5a1672c6a | 6 | Serial pc(USBTX, USBRX, 115200); |
sb8718 | 137:81b5a1672c6a | 7 | WiFiInterface *wifi; |
sb8718 | 140:2252b2df4bc6 | 8 | |
sb8718 | 137:81b5a1672c6a | 9 | TCPSocket socket; |
sb8718 | 137:81b5a1672c6a | 10 | Thread sock_thread; |
sb8718 | 140:2252b2df4bc6 | 11 | |
sb8718 | 137:81b5a1672c6a | 12 | char rx_buf_pc[100]; |
sb8718 | 137:81b5a1672c6a | 13 | int index = 0; |
sb8718 | 140:2252b2df4bc6 | 14 | volatile int flag; |
sb8718 | 128:29911670c7fd | 15 | |
sb8718 | 140:2252b2df4bc6 | 16 | void rx_cb(void) |
sb8718 | 137:81b5a1672c6a | 17 | { |
sb8718 | 137:81b5a1672c6a | 18 | char ch; |
sb8718 | 137:81b5a1672c6a | 19 | ch = pc.getc(); |
sb8718 | 137:81b5a1672c6a | 20 | pc.putc(ch); |
sb8718 | 137:81b5a1672c6a | 21 | rx_buf_pc[index++] = ch; |
sb8718 | 140:2252b2df4bc6 | 22 | if (ch == 0x0D) { |
sb8718 | 137:81b5a1672c6a | 23 | pc.putc(0x0A); |
sb8718 | 137:81b5a1672c6a | 24 | rx_buf_pc[--index] = '\0'; |
sb8718 | 137:81b5a1672c6a | 25 | index = 0; |
sb8718 | 137:81b5a1672c6a | 26 | flag = 1; |
sb8718 | 137:81b5a1672c6a | 27 | } |
sb8718 | 137:81b5a1672c6a | 28 | } |
sb8718 | 135:03997cc206a4 | 29 | |
sb8718 | 140:2252b2df4bc6 | 30 | |
sb8718 | 140:2252b2df4bc6 | 31 | void rx_thread() |
sb8718 | 137:81b5a1672c6a | 32 | { |
sb8718 | 137:81b5a1672c6a | 33 | char* buf = (char*)malloc(1024); |
sb8718 | 140:2252b2df4bc6 | 34 | |
sb8718 | 140:2252b2df4bc6 | 35 | while(true) |
sb8718 | 140:2252b2df4bc6 | 36 | { |
sb8718 | 137:81b5a1672c6a | 37 | nsapi_size_or_error_t size = socket.recv(buf, 1024); |
sb8718 | 140:2252b2df4bc6 | 38 | if (size <= 0) |
sb8718 | 140:2252b2df4bc6 | 39 | { |
sb8718 | 137:81b5a1672c6a | 40 | if (size == NSAPI_ERROR_WOULD_BLOCK) continue; |
sb8718 | 140:2252b2df4bc6 | 41 | |
sb8718 | 137:81b5a1672c6a | 42 | pc.printf("Error while receiving data from TCP socket (%d)\r\n", size); |
sb8718 | 137:81b5a1672c6a | 43 | return; |
sb8718 | 137:81b5a1672c6a | 44 | } |
sb8718 | 140:2252b2df4bc6 | 45 | buf[size] = '\0'; |
sb8718 | 137:81b5a1672c6a | 46 | pc.printf("\r\nRX data: (%d) %s \r\n", size, buf); |
sb8718 | 137:81b5a1672c6a | 47 | } |
sb8718 | 137:81b5a1672c6a | 48 | } |
sb8718 | 130:d19783810c05 | 49 | |
sb8718 | 140:2252b2df4bc6 | 50 | |
sb8718 | 135:03997cc206a4 | 51 | int main() { |
sb8718 | 137:81b5a1672c6a | 52 | SocketAddress sockAddr; |
sb8718 | 137:81b5a1672c6a | 53 | SocketAddress serverAddr(SERVER_IP, SERVER_PORT); |
sb8718 | 140:2252b2df4bc6 | 54 | |
sb8718 | 137:81b5a1672c6a | 55 | pc.printf("\r\n WiFi TCP Client example\r\n"); |
sb8718 | 140:2252b2df4bc6 | 56 | |
sb8718 | 137:81b5a1672c6a | 57 | wifi = WiFiInterface::get_default_instance(); |
sb8718 | 137:81b5a1672c6a | 58 | if (!wifi) |
sb8718 | 137:81b5a1672c6a | 59 | { |
sb8718 | 137:81b5a1672c6a | 60 | pc.printf("ERROR: No WiFiInterface found.\n"); |
sb8718 | 137:81b5a1672c6a | 61 | while(1); |
sb8718 | 137:81b5a1672c6a | 62 | } |
sb8718 | 140:2252b2df4bc6 | 63 | |
sb8718 | 137:81b5a1672c6a | 64 | pc.printf("Connecting to %s...\r\n", MBED_CONF_APP_WIFI_SSID); |
sb8718 | 140:2252b2df4bc6 | 65 | int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
sb8718 | 137:81b5a1672c6a | 66 | if (ret != 0) |
sb8718 | 137:81b5a1672c6a | 67 | { |
sb8718 | 137:81b5a1672c6a | 68 | pc.printf("Connection error!!\r\n"); |
sb8718 | 137:81b5a1672c6a | 69 | while(1); |
sb8718 | 137:81b5a1672c6a | 70 | } |
sb8718 | 140:2252b2df4bc6 | 71 | |
sb8718 | 137:81b5a1672c6a | 72 | pc.printf("Success!!\r\n"); |
sb8718 | 137:81b5a1672c6a | 73 | pc.printf("RSSI: %d\r\n", wifi->get_rssi()); |
sb8718 | 140:2252b2df4bc6 | 74 | |
sb8718 | 140:2252b2df4bc6 | 75 | wifi->get_ip_address(&sockAddr); |
sb8718 | 140:2252b2df4bc6 | 76 | pc.printf("IP : %s, ", sockAddr.get_ip_address()); |
sb8718 | 140:2252b2df4bc6 | 77 | |
sb8718 | 140:2252b2df4bc6 | 78 | pc.printf("Netmask: %s, ", wifi->get_netmask()); |
sb8718 | 140:2252b2df4bc6 | 79 | |
sb8718 | 138:e829be898713 | 80 | wifi->get_gateway(&sockAddr); |
sb8718 | 137:81b5a1672c6a | 81 | pc.printf("Gateway: %s\r\n", sockAddr.get_ip_address()); |
sb8718 | 140:2252b2df4bc6 | 82 | |
sb8718 | 137:81b5a1672c6a | 83 | socket.open(wifi); |
sb8718 | 137:81b5a1672c6a | 84 | int response = socket.connect(serverAddr); |
sb8718 | 140:2252b2df4bc6 | 85 | if (0 != response) |
sb8718 | 137:81b5a1672c6a | 86 | { |
sb8718 | 140:2252b2df4bc6 | 87 | pc.printf("Enter connecting: %d\r\n", response); |
sb8718 | 137:81b5a1672c6a | 88 | socket.close(); |
sb8718 | 137:81b5a1672c6a | 89 | wifi->disconnect(); |
sb8718 | 137:81b5a1672c6a | 90 | while(1); |
sb8718 | 140:2252b2df4bc6 | 91 | } |
sb8718 | 140:2252b2df4bc6 | 92 | |
sb8718 | 137:81b5a1672c6a | 93 | sock_thread.start(&rx_thread); |
sb8718 | 140:2252b2df4bc6 | 94 | //pc.attach(&rx_cb); |
sb8718 | 140:2252b2df4bc6 | 95 | |
sb8718 | 140:2252b2df4bc6 | 96 | while(1) |
sb8718 | 137:81b5a1672c6a | 97 | { |
sb8718 | 137:81b5a1672c6a | 98 | flag = 0; |
sb8718 | 137:81b5a1672c6a | 99 | pc.printf("Enter characters to send to a server: "); |
sb8718 | 140:2252b2df4bc6 | 100 | while (flag != 1) |
sb8718 | 140:2252b2df4bc6 | 101 | { |
sb8718 | 140:2252b2df4bc6 | 102 | char ch; |
sb8718 | 140:2252b2df4bc6 | 103 | if (pc.readable()) |
sb8718 | 140:2252b2df4bc6 | 104 | { |
sb8718 | 140:2252b2df4bc6 | 105 | ch = pc.getc(); |
sb8718 | 140:2252b2df4bc6 | 106 | pc.putc(ch); |
sb8718 | 140:2252b2df4bc6 | 107 | rx_buf_pc[index++] = ch; |
sb8718 | 140:2252b2df4bc6 | 108 | if (ch == 0x0D) { |
sb8718 | 140:2252b2df4bc6 | 109 | pc.putc(0x0A); |
sb8718 | 140:2252b2df4bc6 | 110 | rx_buf_pc[--index] = '\0'; |
sb8718 | 140:2252b2df4bc6 | 111 | index = 0; |
sb8718 | 140:2252b2df4bc6 | 112 | flag = 1; |
sb8718 | 140:2252b2df4bc6 | 113 | } |
sb8718 | 140:2252b2df4bc6 | 114 | } |
sb8718 | 137:81b5a1672c6a | 115 | } |
sb8718 | 140:2252b2df4bc6 | 116 | |
sb8718 | 140:2252b2df4bc6 | 117 | if (!strcmp(rx_buf_pc, "q") || !strcmp(rx_buf_pc, "Q")) |
sb8718 | 140:2252b2df4bc6 | 118 | { |
sb8718 | 137:81b5a1672c6a | 119 | break; |
sb8718 | 140:2252b2df4bc6 | 120 | } |
sb8718 | 140:2252b2df4bc6 | 121 | else |
sb8718 | 140:2252b2df4bc6 | 122 | { |
sb8718 | 137:81b5a1672c6a | 123 | int len = strlen(rx_buf_pc); |
sb8718 | 137:81b5a1672c6a | 124 | pc.printf("Sent: %s (%d)\r\n", rx_buf_pc, len); |
sb8718 | 137:81b5a1672c6a | 125 | rx_buf_pc[len++] = 0x0D; |
sb8718 | 137:81b5a1672c6a | 126 | rx_buf_pc[len++] = 0x0A; |
sb8718 | 140:2252b2df4bc6 | 127 | socket.send((const char *) rx_buf_pc, len); |
sb8718 | 140:2252b2df4bc6 | 128 | Thread::wait(500); |
sb8718 | 130:d19783810c05 | 129 | } |
sb8718 | 131:8fb226cc407c | 130 | } |
sb8718 | 140:2252b2df4bc6 | 131 | |
sb8718 | 137:81b5a1672c6a | 132 | socket.close(); |
sb8718 | 137:81b5a1672c6a | 133 | wifi->disconnect(); |
sb8718 | 137:81b5a1672c6a | 134 | sock_thread.join(); |
sb8718 | 137:81b5a1672c6a | 135 | pc.printf("RX sock_thread joined!!\r\n"); |
sb8718 | 137:81b5a1672c6a | 136 | pc.printf("\nDone\r\n"); |
sb8718 | 137:81b5a1672c6a | 137 | Thread::wait(osWaitForever); |
sb8718 | 140:2252b2df4bc6 | 138 | } |