This library can be used in mbed driver or mbed OS2. So If you want to use WizFi310 on mbed OS5, You have to use another WizFi310 library(wizfi310-driver). That is git repository for wizfi310-driver. - https://github.com/ARMmbed/wizfi310-driver

Dependents:   KT_IoTMakers_WizFi310_Example WizFi310_STATION_HelloWorld WizFi310_DNS_TCP_HelloWorld WizFi310_Ubidots ... more

This library can be used in mbed driver or mbed OS2. So If you want to use WizFi310 on mbed OS5, You have to use another WizFi310 library(wizfi310-driver).

That is git repository for wizfi310-driver. - https://github.com/ARMmbed/wizfi310-driver

Committer:
stkim92
Date:
Wed Apr 12 05:18:09 2017 +0000
Revision:
3:dae9a0924a73
Parent:
2:04c8d61984a3
Child:
4:176b6f3addd6
Added connectAP function for AP mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jehoon 0:df571f8f8c03 1 /* WizFi310 implementation of NetworkInterfaceAPI
jehoon 0:df571f8f8c03 2 * Copyright (c) 2015 ARM Limited
jehoon 0:df571f8f8c03 3 *
jehoon 0:df571f8f8c03 4 * Licensed under the Apache License, Version 2.0 (the "License");
jehoon 0:df571f8f8c03 5 * you may not use this file except in compliance with the License.
jehoon 0:df571f8f8c03 6 * You may obtain a copy of the License at
jehoon 0:df571f8f8c03 7 *
jehoon 0:df571f8f8c03 8 * http://www.apache.org/licenses/LICENSE-2.0
jehoon 0:df571f8f8c03 9 *
jehoon 0:df571f8f8c03 10 * Unless required by applicable law or agreed to in writing, software
jehoon 0:df571f8f8c03 11 * distributed under the License is distributed on an "AS IS" BASIS,
jehoon 0:df571f8f8c03 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
jehoon 0:df571f8f8c03 13 * See the License for the specific language governing permissions and
jehoon 0:df571f8f8c03 14 * limitations under the License.
jehoon 0:df571f8f8c03 15 */
jehoon 0:df571f8f8c03 16
jehoon 0:df571f8f8c03 17
jehoon 0:df571f8f8c03 18 #include "WizFi310Interface.h"
jehoon 0:df571f8f8c03 19
jehoon 0:df571f8f8c03 20 // Various timeouts for different WizFi310 operations
jehoon 0:df571f8f8c03 21 #define WizFi310_CONNECT_TIMEOUT 15000
jehoon 0:df571f8f8c03 22 #define WizFi310_SEND_TIMEOUT 500
jehoon 0:df571f8f8c03 23 #define WizFi310_RECV_TIMEOUT 0
jehoon 0:df571f8f8c03 24 #define WizFi310_MISC_TIMEOUT 500
jehoon 0:df571f8f8c03 25
jehoon 0:df571f8f8c03 26 #define WizFi310_DELAY_MS 300
jehoon 0:df571f8f8c03 27
jehoon 0:df571f8f8c03 28
jehoon 0:df571f8f8c03 29 // WizFi310Interface implementation
jehoon 0:df571f8f8c03 30 WizFi310Interface::WizFi310Interface(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud)
jehoon 0:df571f8f8c03 31 : _wizfi310(tx, rx, cts, rts, reset, alarm, baud)
jehoon 0:df571f8f8c03 32 {
jehoon 0:df571f8f8c03 33 memset(_ids, 0, sizeof(_ids));
jehoon 0:df571f8f8c03 34 }
jehoon 0:df571f8f8c03 35
jehoon 0:df571f8f8c03 36 int WizFi310Interface::connect(
jehoon 0:df571f8f8c03 37 const char *ssid,
jehoon 0:df571f8f8c03 38 const char *pass,
jehoon 0:df571f8f8c03 39 nsapi_security_t security)
jehoon 0:df571f8f8c03 40 {
jehoon 0:df571f8f8c03 41 if (!_wizfi310.startup())
jehoon 0:df571f8f8c03 42 {
jehoon 0:df571f8f8c03 43 return NSAPI_ERROR_DEVICE_ERROR;
jehoon 0:df571f8f8c03 44 }
jehoon 0:df571f8f8c03 45
jehoon 0:df571f8f8c03 46 _wizfi310.setSsid(ssid);
jehoon 0:df571f8f8c03 47 _wizfi310.setSec(security, pass);
jehoon 0:df571f8f8c03 48 _wizfi310.setAddress("");
jehoon 0:df571f8f8c03 49
jehoon 0:df571f8f8c03 50 if( _wizfi310.join(WizFi310::WM_STATION) == -1)
jehoon 0:df571f8f8c03 51 {
jehoon 0:df571f8f8c03 52 return NSAPI_ERROR_NO_CONNECTION;
jehoon 0:df571f8f8c03 53 }
jehoon 0:df571f8f8c03 54
jehoon 0:df571f8f8c03 55 return 0;
jehoon 0:df571f8f8c03 56 }
jehoon 0:df571f8f8c03 57
stkim92 3:dae9a0924a73 58 int WizFi310Interface::connectAP(
stkim92 3:dae9a0924a73 59 const char *ssid,
stkim92 3:dae9a0924a73 60 const char *pass,
stkim92 3:dae9a0924a73 61 nsapi_security_t security)
stkim92 3:dae9a0924a73 62 {
stkim92 3:dae9a0924a73 63 if (!_wizfi310.startup())
stkim92 3:dae9a0924a73 64 {
stkim92 3:dae9a0924a73 65 return NSAPI_ERROR_DEVICE_ERROR;
stkim92 3:dae9a0924a73 66 }
stkim92 3:dae9a0924a73 67
stkim92 3:dae9a0924a73 68 _wizfi310.setSsid(ssid);
stkim92 3:dae9a0924a73 69 _wizfi310.setSec(security, pass);
stkim92 3:dae9a0924a73 70 //_wizfi310.setAddress("192.168.1.1");
stkim92 3:dae9a0924a73 71 _wizfi310.setAddress("192.168.100.1","255.255.255.0","192.168.100.1");
stkim92 3:dae9a0924a73 72
stkim92 3:dae9a0924a73 73 if( _wizfi310.join(WizFi310::WM_AP) == -1)
stkim92 3:dae9a0924a73 74 {
stkim92 3:dae9a0924a73 75 return NSAPI_ERROR_NO_CONNECTION;
stkim92 3:dae9a0924a73 76 }
stkim92 3:dae9a0924a73 77
stkim92 3:dae9a0924a73 78 return 0;
stkim92 3:dae9a0924a73 79 }
stkim92 3:dae9a0924a73 80
stkim92 3:dae9a0924a73 81
jehoon 0:df571f8f8c03 82 int WizFi310Interface::disconnect()
jehoon 0:df571f8f8c03 83 {
jehoon 0:df571f8f8c03 84 if ( _wizfi310.cmdWLEAVE() == -1 ) return NSAPI_ERROR_DEVICE_ERROR;
jehoon 0:df571f8f8c03 85
jehoon 0:df571f8f8c03 86 return 0;
jehoon 0:df571f8f8c03 87 }
jehoon 0:df571f8f8c03 88
jehoon 0:df571f8f8c03 89 const char *WizFi310Interface::get_ip_address()
jehoon 0:df571f8f8c03 90 {
jehoon 0:df571f8f8c03 91 return _wizfi310.getIPAddress();
jehoon 0:df571f8f8c03 92 }
jehoon 0:df571f8f8c03 93
jehoon 0:df571f8f8c03 94 const char *WizFi310Interface::get_mac_address()
jehoon 0:df571f8f8c03 95 {
jehoon 0:df571f8f8c03 96 return _wizfi310.getMACAddress();
jehoon 0:df571f8f8c03 97 }
jehoon 0:df571f8f8c03 98
jehoon 0:df571f8f8c03 99 struct wizfi310_socket {
jehoon 0:df571f8f8c03 100 int id;
jehoon 0:df571f8f8c03 101 nsapi_protocol_t proto;
jehoon 0:df571f8f8c03 102 bool connected;
jehoon 0:df571f8f8c03 103 };
jehoon 0:df571f8f8c03 104
jehoon 0:df571f8f8c03 105 int WizFi310Interface::socket_open(void **handle, nsapi_protocol_t proto)
jehoon 0:df571f8f8c03 106 {
jehoon 0:df571f8f8c03 107 // Look for an unused socket
jehoon 0:df571f8f8c03 108
jehoon 0:df571f8f8c03 109 /*
jehoon 0:df571f8f8c03 110 int id = -1;
jehoon 0:df571f8f8c03 111
jehoon 0:df571f8f8c03 112 for (int i = 0; i < WIZFI310_SOCKET_COUNT; i++) {
jehoon 0:df571f8f8c03 113 if (_ids[i] == false) {
jehoon 0:df571f8f8c03 114 id = i;
jehoon 0:df571f8f8c03 115 _ids[i] = true;
jehoon 0:df571f8f8c03 116 break;
jehoon 0:df571f8f8c03 117 }
jehoon 0:df571f8f8c03 118 }
jehoon 0:df571f8f8c03 119
jehoon 0:df571f8f8c03 120 if (id == -1) {
jehoon 0:df571f8f8c03 121 return NSAPI_ERROR_NO_SOCKET;
jehoon 0:df571f8f8c03 122 }
jehoon 0:df571f8f8c03 123 */
jehoon 0:df571f8f8c03 124
jehoon 0:df571f8f8c03 125 struct wizfi310_socket *socket = new struct wizfi310_socket;
jehoon 0:df571f8f8c03 126 if (!socket) {
jehoon 0:df571f8f8c03 127 return NSAPI_ERROR_NO_SOCKET;
jehoon 0:df571f8f8c03 128 }
jehoon 0:df571f8f8c03 129
jehoon 0:df571f8f8c03 130 socket->id = -1;
jehoon 0:df571f8f8c03 131 socket->proto = proto;
jehoon 0:df571f8f8c03 132 socket->connected = false;
jehoon 0:df571f8f8c03 133 *handle = socket;
jehoon 0:df571f8f8c03 134 return 0;
jehoon 0:df571f8f8c03 135 }
jehoon 0:df571f8f8c03 136
jehoon 0:df571f8f8c03 137 int WizFi310Interface::socket_close(void *handle)
jehoon 0:df571f8f8c03 138 {
jehoon 0:df571f8f8c03 139 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 140 int err = 0;
jehoon 0:df571f8f8c03 141
jehoon 0:df571f8f8c03 142 if(socket->id == -1){
jehoon 0:df571f8f8c03 143 err = NSAPI_ERROR_NO_SOCKET;
jehoon 0:df571f8f8c03 144 }
jehoon 0:df571f8f8c03 145 else if (_wizfi310.close(socket->id) == -1) {
jehoon 0:df571f8f8c03 146 err = NSAPI_ERROR_DEVICE_ERROR;
jehoon 0:df571f8f8c03 147 }
jehoon 0:df571f8f8c03 148
jehoon 0:df571f8f8c03 149 _ids[socket->id] = false;
jehoon 0:df571f8f8c03 150 wait_ms(WizFi310_DELAY_MS);
jehoon 0:df571f8f8c03 151 delete socket;
jehoon 0:df571f8f8c03 152 return err;
jehoon 0:df571f8f8c03 153 }
jehoon 0:df571f8f8c03 154
jehoon 0:df571f8f8c03 155 int WizFi310Interface::socket_bind(void *handle, const SocketAddress &address)
jehoon 0:df571f8f8c03 156 {
jehoon 0:df571f8f8c03 157 return NSAPI_ERROR_UNSUPPORTED;
jehoon 0:df571f8f8c03 158 }
jehoon 0:df571f8f8c03 159
jehoon 0:df571f8f8c03 160 int WizFi310Interface::socket_listen(void *handle, int backlog)
jehoon 0:df571f8f8c03 161 {
jehoon 0:df571f8f8c03 162 return NSAPI_ERROR_UNSUPPORTED;
jehoon 0:df571f8f8c03 163 }
jehoon 0:df571f8f8c03 164
jehoon 0:df571f8f8c03 165 int WizFi310Interface::socket_connect(void *handle, const SocketAddress &addr)
jehoon 0:df571f8f8c03 166 {
jehoon 0:df571f8f8c03 167 int cid=-1;
jehoon 0:df571f8f8c03 168 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 169
jehoon 0:df571f8f8c03 170 WizFi310::Protocol proto = (socket->proto == NSAPI_UDP) ? WizFi310::PROTO_UDP : WizFi310::PROTO_TCP;
jehoon 0:df571f8f8c03 171 if((cid = _wizfi310.open(proto, addr.get_ip_address(), addr.get_port())) == -1 )
jehoon 0:df571f8f8c03 172 {
jehoon 0:df571f8f8c03 173 return NSAPI_ERROR_DEVICE_ERROR;
jehoon 0:df571f8f8c03 174 }
jehoon 0:df571f8f8c03 175
jehoon 0:df571f8f8c03 176 if(cid >= WIZFI310_SOCKET_COUNT)
jehoon 0:df571f8f8c03 177 {
jehoon 0:df571f8f8c03 178 return NSAPI_ERROR_NO_SOCKET;
jehoon 0:df571f8f8c03 179 }
jehoon 0:df571f8f8c03 180
jehoon 0:df571f8f8c03 181 _ids[cid] = true;
jehoon 0:df571f8f8c03 182 socket->id = cid;
jehoon 0:df571f8f8c03 183 socket->connected = true;
jehoon 0:df571f8f8c03 184 wait_ms(WizFi310_DELAY_MS);
jehoon 0:df571f8f8c03 185 return 0;
jehoon 0:df571f8f8c03 186 }
jehoon 0:df571f8f8c03 187
jehoon 0:df571f8f8c03 188 int WizFi310Interface::socket_accept(void **handle, void *server)
jehoon 0:df571f8f8c03 189 {
jehoon 0:df571f8f8c03 190 return NSAPI_ERROR_UNSUPPORTED;
jehoon 0:df571f8f8c03 191 }
jehoon 0:df571f8f8c03 192
jehoon 0:df571f8f8c03 193 int WizFi310Interface::socket_send(void *handle, const void *data, unsigned size)
jehoon 0:df571f8f8c03 194 {
jehoon 0:df571f8f8c03 195 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 196
jehoon 0:df571f8f8c03 197 if ( _wizfi310.send(socket->id, (const char*)data, size) == -1 ) {
jehoon 0:df571f8f8c03 198 return NSAPI_ERROR_DEVICE_ERROR;
jehoon 0:df571f8f8c03 199 }
jehoon 0:df571f8f8c03 200
jehoon 0:df571f8f8c03 201 return size;
jehoon 0:df571f8f8c03 202 }
jehoon 0:df571f8f8c03 203
jehoon 0:df571f8f8c03 204 int WizFi310Interface::socket_recv(void *handle, void *data, unsigned size)
jehoon 0:df571f8f8c03 205 {
jehoon 0:df571f8f8c03 206 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 207
jehoon 0:df571f8f8c03 208 int32_t recv = _wizfi310.recv(socket->id, (char*)data, size);
kaizen 2:04c8d61984a3 209 if (recv <= 0) {
jehoon 0:df571f8f8c03 210 return NSAPI_ERROR_WOULD_BLOCK;
jehoon 0:df571f8f8c03 211 }
jehoon 0:df571f8f8c03 212
jehoon 0:df571f8f8c03 213 return recv;
jehoon 0:df571f8f8c03 214 }
jehoon 0:df571f8f8c03 215
jehoon 0:df571f8f8c03 216 int WizFi310Interface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size)
jehoon 0:df571f8f8c03 217 {
jehoon 0:df571f8f8c03 218 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 219 if (!socket->connected) {
jehoon 0:df571f8f8c03 220 int err = socket_connect(socket, addr);
jehoon 0:df571f8f8c03 221 if (err < 0) {
jehoon 0:df571f8f8c03 222 return err;
jehoon 0:df571f8f8c03 223 }
jehoon 0:df571f8f8c03 224 }
jehoon 0:df571f8f8c03 225
jehoon 0:df571f8f8c03 226 return socket_send(socket, data, size);
jehoon 0:df571f8f8c03 227 }
jehoon 0:df571f8f8c03 228
jehoon 0:df571f8f8c03 229 int WizFi310Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size)
jehoon 0:df571f8f8c03 230 {
jehoon 0:df571f8f8c03 231 struct wizfi310_socket *socket = (struct wizfi310_socket *)handle;
jehoon 0:df571f8f8c03 232 return socket_recv(socket, data, size);
jehoon 0:df571f8f8c03 233 }
jehoon 0:df571f8f8c03 234
jehoon 0:df571f8f8c03 235 void WizFi310Interface::socket_attach(void *handle, void (*callback)(void *), void *data)
jehoon 0:df571f8f8c03 236 {
jehoon 0:df571f8f8c03 237 }