Hiroaki Okoshi / Mbed OS mbed-os-example-odinw2-wifi-ap-udp-echo
Committer:
Hiroaki_Okoshi
Date:
Sun Oct 10 15:06:21 2021 +0000
Revision:
0:fffc9412550a
Please note this repository is no longer maintained by u-blox.; ; "# mbed-os-example-odinw2-wifi-ap-udp-echo"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hiroaki_Okoshi 0:fffc9412550a 1 /* WiFi AP Example
Hiroaki_Okoshi 0:fffc9412550a 2 * Copyright (c) 2018 ARM Limited
Hiroaki_Okoshi 0:fffc9412550a 3 *
Hiroaki_Okoshi 0:fffc9412550a 4 * Licensed under the Apache License, Version 2.0 (the "License");
Hiroaki_Okoshi 0:fffc9412550a 5 * you may not use this file except in compliance with the License.
Hiroaki_Okoshi 0:fffc9412550a 6 * You may obtain a copy of the License at
Hiroaki_Okoshi 0:fffc9412550a 7 *
Hiroaki_Okoshi 0:fffc9412550a 8 * http://www.apache.org/licenses/LICENSE-2.0
Hiroaki_Okoshi 0:fffc9412550a 9 *
Hiroaki_Okoshi 0:fffc9412550a 10 * Unless required by applicable law or agreed to in writing, software
Hiroaki_Okoshi 0:fffc9412550a 11 * distributed under the License is distributed on an "AS IS" BASIS,
Hiroaki_Okoshi 0:fffc9412550a 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Hiroaki_Okoshi 0:fffc9412550a 13 * See the License for the specific language governing permissions and
Hiroaki_Okoshi 0:fffc9412550a 14 * limitations under the License.
Hiroaki_Okoshi 0:fffc9412550a 15 */
Hiroaki_Okoshi 0:fffc9412550a 16
Hiroaki_Okoshi 0:fffc9412550a 17 #include "mbed.h"
Hiroaki_Okoshi 0:fffc9412550a 18 #include "OdinWiFiInterface.h"
Hiroaki_Okoshi 0:fffc9412550a 19 #include <string>
Hiroaki_Okoshi 0:fffc9412550a 20
Hiroaki_Okoshi 0:fffc9412550a 21 #ifdef DEVICE_WIFI_AP
Hiroaki_Okoshi 0:fffc9412550a 22 static const char *wifi_ssid = MBED_CONF_APP_WIFI_SSID;
Hiroaki_Okoshi 0:fffc9412550a 23 static const char *wifi_password = MBED_CONF_APP_WIFI_PASSWORD;
Hiroaki_Okoshi 0:fffc9412550a 24 static const char *ap_ip = MBED_CONF_APP_AP_IP;
Hiroaki_Okoshi 0:fffc9412550a 25 static const char *ap_netmask = MBED_CONF_APP_AP_NETMASK;
Hiroaki_Okoshi 0:fffc9412550a 26 static const char *ap_gateway = MBED_CONF_APP_AP_GATEWAY;
Hiroaki_Okoshi 0:fffc9412550a 27 #endif
Hiroaki_Okoshi 0:fffc9412550a 28
Hiroaki_Okoshi 0:fffc9412550a 29 #define ECHO_SERVER_PORT 5050
Hiroaki_Okoshi 0:fffc9412550a 30
Hiroaki_Okoshi 0:fffc9412550a 31 #define UDP_CLIENT_ADDR "10.0.0.10"
Hiroaki_Okoshi 0:fffc9412550a 32 #define UDP_CLIENT_PORT 5050
Hiroaki_Okoshi 0:fffc9412550a 33
Hiroaki_Okoshi 0:fffc9412550a 34 OdinWiFiInterface *_wifi;
Hiroaki_Okoshi 0:fffc9412550a 35
Hiroaki_Okoshi 0:fffc9412550a 36 static void start_ap(nsapi_security_t security = NSAPI_SECURITY_WPA_WPA2)
Hiroaki_Okoshi 0:fffc9412550a 37 {
Hiroaki_Okoshi 0:fffc9412550a 38 nsapi_error_t error_code;
Hiroaki_Okoshi 0:fffc9412550a 39
Hiroaki_Okoshi 0:fffc9412550a 40 printf("\nStarting AP\n");
Hiroaki_Okoshi 0:fffc9412550a 41
Hiroaki_Okoshi 0:fffc9412550a 42 // AP Configure and start
Hiroaki_Okoshi 0:fffc9412550a 43 error_code = _wifi->set_ap_network(ap_ip, ap_netmask, ap_gateway);
Hiroaki_Okoshi 0:fffc9412550a 44 MBED_ASSERT(error_code == NSAPI_ERROR_OK);
Hiroaki_Okoshi 0:fffc9412550a 45
Hiroaki_Okoshi 0:fffc9412550a 46 //DHCP not available
Hiroaki_Okoshi 0:fffc9412550a 47 error_code = _wifi->set_ap_dhcp(false);
Hiroaki_Okoshi 0:fffc9412550a 48 MBED_ASSERT(error_code == NSAPI_ERROR_OK);
Hiroaki_Okoshi 0:fffc9412550a 49
Hiroaki_Okoshi 0:fffc9412550a 50 //Set beacon interval to default value
Hiroaki_Okoshi 0:fffc9412550a 51 _wifi->set_ap_beacon_interval(100);
Hiroaki_Okoshi 0:fffc9412550a 52
Hiroaki_Okoshi 0:fffc9412550a 53 //Set ap ssid, password and channel
Hiroaki_Okoshi 0:fffc9412550a 54 error_code = _wifi->ap_start(wifi_ssid, wifi_password, security, cbWLAN_CHANNEL_01);
Hiroaki_Okoshi 0:fffc9412550a 55 MBED_ASSERT(error_code == NSAPI_ERROR_OK);
Hiroaki_Okoshi 0:fffc9412550a 56
Hiroaki_Okoshi 0:fffc9412550a 57 printf("\nAP started successfully\n");
Hiroaki_Okoshi 0:fffc9412550a 58 }
Hiroaki_Okoshi 0:fffc9412550a 59
Hiroaki_Okoshi 0:fffc9412550a 60
Hiroaki_Okoshi 0:fffc9412550a 61 static void stop_ap()
Hiroaki_Okoshi 0:fffc9412550a 62 {
Hiroaki_Okoshi 0:fffc9412550a 63 nsapi_error_t error_code;
Hiroaki_Okoshi 0:fffc9412550a 64
Hiroaki_Okoshi 0:fffc9412550a 65 error_code = _wifi->ap_stop();
Hiroaki_Okoshi 0:fffc9412550a 66 MBED_ASSERT(error_code == NSAPI_ERROR_OK);
Hiroaki_Okoshi 0:fffc9412550a 67
Hiroaki_Okoshi 0:fffc9412550a 68 printf("\nAP stopped\n");
Hiroaki_Okoshi 0:fffc9412550a 69
Hiroaki_Okoshi 0:fffc9412550a 70 }
Hiroaki_Okoshi 0:fffc9412550a 71
Hiroaki_Okoshi 0:fffc9412550a 72 int main()
Hiroaki_Okoshi 0:fffc9412550a 73 {
Hiroaki_Okoshi 0:fffc9412550a 74 nsapi_size_or_error_t errcode;
Hiroaki_Okoshi 0:fffc9412550a 75 nsapi_error_t *err;
Hiroaki_Okoshi 0:fffc9412550a 76 UDPSocket sock;
Hiroaki_Okoshi 0:fffc9412550a 77 SocketAddress sockAddr;
Hiroaki_Okoshi 0:fffc9412550a 78 int n = 0;
Hiroaki_Okoshi 0:fffc9412550a 79 char recv_buf[1024];
Hiroaki_Okoshi 0:fffc9412550a 80
Hiroaki_Okoshi 0:fffc9412550a 81 /* Version Info */
Hiroaki_Okoshi 0:fffc9412550a 82 printf("Mbed OS version %d.%d.%d\r\n", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);
Hiroaki_Okoshi 0:fffc9412550a 83
Hiroaki_Okoshi 0:fffc9412550a 84 /*Start AP*/
Hiroaki_Okoshi 0:fffc9412550a 85 _wifi = new OdinWiFiInterface(true);
Hiroaki_Okoshi 0:fffc9412550a 86 start_ap();
Hiroaki_Okoshi 0:fffc9412550a 87
Hiroaki_Okoshi 0:fffc9412550a 88 /*Socket initialization*/
Hiroaki_Okoshi 0:fffc9412550a 89 errcode = sock.open(_wifi);
Hiroaki_Okoshi 0:fffc9412550a 90 if (errcode != NSAPI_ERROR_OK) {
Hiroaki_Okoshi 0:fffc9412550a 91 printf("UDPSocket.open() fails, code: %d\n", errcode);
Hiroaki_Okoshi 0:fffc9412550a 92 return -1;
Hiroaki_Okoshi 0:fffc9412550a 93 }
Hiroaki_Okoshi 0:fffc9412550a 94
Hiroaki_Okoshi 0:fffc9412550a 95 errcode = sock.bind(ap_ip, ECHO_SERVER_PORT);
Hiroaki_Okoshi 0:fffc9412550a 96 if (errcode < 0) {
Hiroaki_Okoshi 0:fffc9412550a 97 printf("UDPSocket.connect() fails, code: %d\n", errcode);
Hiroaki_Okoshi 0:fffc9412550a 98 return -1;
Hiroaki_Okoshi 0:fffc9412550a 99 }
Hiroaki_Okoshi 0:fffc9412550a 100 else {
Hiroaki_Okoshi 0:fffc9412550a 101 printf("UDP: connected with %s server\n", ap_ip);
Hiroaki_Okoshi 0:fffc9412550a 102 }
Hiroaki_Okoshi 0:fffc9412550a 103
Hiroaki_Okoshi 0:fffc9412550a 104 /*Echo server*/
Hiroaki_Okoshi 0:fffc9412550a 105
Hiroaki_Okoshi 0:fffc9412550a 106 /*
Hiroaki_Okoshi 0:fffc9412550a 107 Since, unlike TCP, UDP is connectionless, so server
Hiroaki_Okoshi 0:fffc9412550a 108 must know the address of client as well as the port
Hiroaki_Okoshi 0:fffc9412550a 109 it is listening on in order to reach it
Hiroaki_Okoshi 0:fffc9412550a 110 */
Hiroaki_Okoshi 0:fffc9412550a 111 sockAddr.set_ip_address(UDP_CLIENT_ADDR);
Hiroaki_Okoshi 0:fffc9412550a 112 sockAddr.set_port(UDP_CLIENT_PORT);
Hiroaki_Okoshi 0:fffc9412550a 113
Hiroaki_Okoshi 0:fffc9412550a 114 while (1) {
Hiroaki_Okoshi 0:fffc9412550a 115 n = sock.recv((void*) recv_buf, sizeof(recv_buf));
Hiroaki_Okoshi 0:fffc9412550a 116 if (n > 0)
Hiroaki_Okoshi 0:fffc9412550a 117 {
Hiroaki_Okoshi 0:fffc9412550a 118 printf("\n Received from client %d bytes: %s \n", n, recv_buf);
Hiroaki_Okoshi 0:fffc9412550a 119
Hiroaki_Okoshi 0:fffc9412550a 120 errcode = sock.sendto(sockAddr, (void*) recv_buf, n);
Hiroaki_Okoshi 0:fffc9412550a 121 if (errcode < 0)
Hiroaki_Okoshi 0:fffc9412550a 122 {
Hiroaki_Okoshi 0:fffc9412550a 123 printf("\n UDPSocket.sendto() fails, code: %d\n", errcode);
Hiroaki_Okoshi 0:fffc9412550a 124 break;
Hiroaki_Okoshi 0:fffc9412550a 125 }
Hiroaki_Okoshi 0:fffc9412550a 126 else
Hiroaki_Okoshi 0:fffc9412550a 127 {
Hiroaki_Okoshi 0:fffc9412550a 128 printf("\n UDP: Sent %d Bytes to client\n", n);
Hiroaki_Okoshi 0:fffc9412550a 129 }
Hiroaki_Okoshi 0:fffc9412550a 130 }
Hiroaki_Okoshi 0:fffc9412550a 131 else
Hiroaki_Okoshi 0:fffc9412550a 132 {
Hiroaki_Okoshi 0:fffc9412550a 133 printf("\n UDPSocket.recv() failed");
Hiroaki_Okoshi 0:fffc9412550a 134 break;
Hiroaki_Okoshi 0:fffc9412550a 135 }
Hiroaki_Okoshi 0:fffc9412550a 136 }
Hiroaki_Okoshi 0:fffc9412550a 137
Hiroaki_Okoshi 0:fffc9412550a 138 sock.close();
Hiroaki_Okoshi 0:fffc9412550a 139 stop_ap();
Hiroaki_Okoshi 0:fffc9412550a 140 return 0;
Hiroaki_Okoshi 0:fffc9412550a 141 }