iowfehu;gdbjwHJAOPIHO?L

Fork of X_NUCLEO_IDW01M1 by ST

Committer:
mridup
Date:
Tue Apr 19 06:28:52 2016 +0000
Revision:
2:bf3b3c6ce3a0
Parent:
1:bd9db471d47d
Child:
3:fd9d20c4d3f0
removing static singular instance

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 0:dc55f40eb04f 1 /* SpwfSAInterface implementation of NetworkInterfaceAPI
mridup 0:dc55f40eb04f 2 * Copyright (c) 2015 ARM Limited
mridup 0:dc55f40eb04f 3 *
mridup 0:dc55f40eb04f 4 * Licensed under the Apache License, Version 2.0 (the "License");
mridup 0:dc55f40eb04f 5 * you may not use this file except in compliance with the License.
mridup 0:dc55f40eb04f 6 * You may obtain a copy of the License at
mridup 0:dc55f40eb04f 7 *
mridup 0:dc55f40eb04f 8 * http://www.apache.org/licenses/LICENSE-2.0
mridup 0:dc55f40eb04f 9 *
mridup 0:dc55f40eb04f 10 * Unless required by applicable law or agreed to in writing, software
mridup 0:dc55f40eb04f 11 * distributed under the License is distributed on an "AS IS" BASIS,
mridup 0:dc55f40eb04f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mridup 0:dc55f40eb04f 13 * See the License for the specific language governing permissions and
mridup 0:dc55f40eb04f 14 * limitations under the License.
mridup 0:dc55f40eb04f 15 */
mridup 0:dc55f40eb04f 16
mridup 0:dc55f40eb04f 17 #include "SPWFInterface.h"
mridup 0:dc55f40eb04f 18
mridup 0:dc55f40eb04f 19 // Various timeouts for different SPWF operations
mridup 0:dc55f40eb04f 20 #define SPWF_CONNECT_TIMEOUT 20000
mridup 0:dc55f40eb04f 21 #define SPWF_SEND_TIMEOUT 500
mridup 0:dc55f40eb04f 22 #define SPWF_RECV_TIMEOUT 10000
mridup 0:dc55f40eb04f 23 #define SPWF_MISC_TIMEOUT 15000
mridup 0:dc55f40eb04f 24
mridup 0:dc55f40eb04f 25
mridup 0:dc55f40eb04f 26 // SpwfSAInterface implementation
mridup 0:dc55f40eb04f 27 SpwfSAInterface::SpwfSAInterface(PinName tx, PinName rx, PinName rst, PinName wkup, PinName rts, bool debug)
mridup 0:dc55f40eb04f 28 : _spwf(tx, rx, rst, wkup, rts)
mridup 0:dc55f40eb04f 29 {
mridup 0:dc55f40eb04f 30 memset(_ids, 0, sizeof(_ids));
mridup 0:dc55f40eb04f 31 }
mridup 0:dc55f40eb04f 32
mridup 0:dc55f40eb04f 33 SpwfSAInterface::~SpwfSAInterface()
mridup 0:dc55f40eb04f 34 {
mridup 0:dc55f40eb04f 35 }
mridup 0:dc55f40eb04f 36
mridup 0:dc55f40eb04f 37 int32_t SpwfSAInterface::init(void)
mridup 0:dc55f40eb04f 38 {
mridup 0:dc55f40eb04f 39 _spwf.setTimeout(SPWF_MISC_TIMEOUT);
mridup 0:dc55f40eb04f 40 return (_spwf.init());
mridup 0:dc55f40eb04f 41 }
mridup 0:dc55f40eb04f 42
mridup 0:dc55f40eb04f 43 int32_t SpwfSAInterface::connect(
mridup 0:dc55f40eb04f 44 const char *ap,
mridup 0:dc55f40eb04f 45 const char *pass_phrase,
mridup 0:dc55f40eb04f 46 ns_security_t security)
mridup 0:dc55f40eb04f 47 {
mridup 0:dc55f40eb04f 48 _spwf.setTimeout(SPWF_CONNECT_TIMEOUT);
mridup 0:dc55f40eb04f 49
mridup 0:dc55f40eb04f 50 if(security == NS_SECURITY_WPA2) return NS_ERROR_DEVICE_ERROR;
mridup 0:dc55f40eb04f 51
mridup 0:dc55f40eb04f 52 WiFi_Priv_Mode mode = (WiFi_Priv_Mode)security;
mridup 0:dc55f40eb04f 53
mridup 0:dc55f40eb04f 54 return (_spwf.connect((char*)ap, (char*)pass_phrase, mode));//0 on success
mridup 0:dc55f40eb04f 55 }
mridup 0:dc55f40eb04f 56
mridup 0:dc55f40eb04f 57 int32_t SpwfSAInterface::disconnect()
mridup 0:dc55f40eb04f 58 {
mridup 0:dc55f40eb04f 59 //_spwf.setTimeout(SPWF_SEND_TIMEOUT);
mridup 0:dc55f40eb04f 60
mridup 0:dc55f40eb04f 61 return (_spwf.disconnect());
mridup 0:dc55f40eb04f 62 }
mridup 0:dc55f40eb04f 63
mridup 0:dc55f40eb04f 64 const char *SpwfSAInterface::getIPAddress()
mridup 0:dc55f40eb04f 65 {
mridup 0:dc55f40eb04f 66 return _spwf.getIPAddress();
mridup 0:dc55f40eb04f 67 }
mridup 0:dc55f40eb04f 68
mridup 0:dc55f40eb04f 69 const char *SpwfSAInterface::getMACAddress()
mridup 0:dc55f40eb04f 70 {
mridup 0:dc55f40eb04f 71 return _spwf.getMACAddress();
mridup 0:dc55f40eb04f 72 }
mridup 0:dc55f40eb04f 73
mridup 0:dc55f40eb04f 74 void SpwfSAInterface::setid(bool set, int id)
mridup 0:dc55f40eb04f 75 {
mridup 0:dc55f40eb04f 76 if(set)
mridup 0:dc55f40eb04f 77 _ids[id] = true;
mridup 0:dc55f40eb04f 78 else
mridup 0:dc55f40eb04f 79 _ids[id] = false;
mridup 0:dc55f40eb04f 80 }
mridup 0:dc55f40eb04f 81
mridup 0:dc55f40eb04f 82 SocketInterface *SpwfSAInterface::createSocket(ns_protocol_t proto)
mridup 0:dc55f40eb04f 83 {
mridup 0:dc55f40eb04f 84 return new SpwfSASocket(this, &_spwf, proto);
mridup 0:dc55f40eb04f 85 }
mridup 0:dc55f40eb04f 86
mridup 0:dc55f40eb04f 87 void SpwfSAInterface::destroySocket(SocketInterface *iface)
mridup 0:dc55f40eb04f 88 {
mridup 0:dc55f40eb04f 89 SpwfSASocket *socket = (SpwfSASocket *)iface;
mridup 0:dc55f40eb04f 90 _ids[socket->_id] = false;
mridup 0:dc55f40eb04f 91 delete socket;
mridup 0:dc55f40eb04f 92 }
mridup 0:dc55f40eb04f 93
mridup 0:dc55f40eb04f 94
mridup 0:dc55f40eb04f 95 // SpwfSASocket implementation
mridup 0:dc55f40eb04f 96 int32_t SpwfSAInterface::SpwfSASocket::open(const char *ip, uint16_t port)
mridup 0:dc55f40eb04f 97 {
mridup 1:bd9db471d47d 98 uint8_t sock_id = 99;
mridup 0:dc55f40eb04f 99
mridup 0:dc55f40eb04f 100 //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
mridup 0:dc55f40eb04f 101
mridup 0:dc55f40eb04f 102 const char *proto = (_proto == NS_UDP) ? "u" : "t";//"s" for secure socket?
mridup 0:dc55f40eb04f 103
mridup 0:dc55f40eb04f 104 __spwf->socket_client_open((uint8_t*)ip, (uint32_t)port, (uint8_t *)proto, &sock_id);
mridup 0:dc55f40eb04f 105
mridup 0:dc55f40eb04f 106 //TODO: Maintain a socket table to map socket ID to host & port
mridup 0:dc55f40eb04f 107 //TODO: lookup on client table to see if already socket is allocated to same host/port
mridup 0:dc55f40eb04f 108 //multimap <char *, vector <uint16_t> > ::iterator i = c_table.find((char*)ip);
mridup 0:dc55f40eb04f 109
mridup 0:dc55f40eb04f 110 if(sock_id <= SPWFSA_SOCKET_COUNT)
mridup 0:dc55f40eb04f 111 {
mridup 0:dc55f40eb04f 112 _id = sock_id;//the socket ID of this Socket instance
mridup 0:dc55f40eb04f 113 _itf->setid(true, _id);
mridup 0:dc55f40eb04f 114 //_itf->c_table.insert(pair <char *, vector <uint16_t> > ((char*)ip, port));
mridup 0:dc55f40eb04f 115 }
mridup 0:dc55f40eb04f 116 else
mridup 0:dc55f40eb04f 117 return NS_ERROR_NO_SOCKET;
mridup 0:dc55f40eb04f 118
mridup 0:dc55f40eb04f 119 return 0;//0 means SUCCESS
mridup 0:dc55f40eb04f 120 }
mridup 0:dc55f40eb04f 121
mridup 0:dc55f40eb04f 122 int32_t SpwfSAInterface::SpwfSASocket::close()
mridup 0:dc55f40eb04f 123 {
mridup 0:dc55f40eb04f 124 int32_t err;
mridup 0:dc55f40eb04f 125
mridup 0:dc55f40eb04f 126 //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
mridup 0:dc55f40eb04f 127
mridup 0:dc55f40eb04f 128 _itf->setid(false, _id);
mridup 0:dc55f40eb04f 129 //_itf->c_table.empty();
mridup 0:dc55f40eb04f 130
mridup 0:dc55f40eb04f 131 err = __spwf->socket_client_close((uint8_t)_id);
mridup 0:dc55f40eb04f 132
mridup 0:dc55f40eb04f 133 return err;
mridup 0:dc55f40eb04f 134 }
mridup 0:dc55f40eb04f 135
mridup 0:dc55f40eb04f 136 int32_t SpwfSAInterface::SpwfSASocket::send(const void *data, uint32_t size)
mridup 0:dc55f40eb04f 137 {
mridup 0:dc55f40eb04f 138 int32_t err;
mridup 0:dc55f40eb04f 139
mridup 0:dc55f40eb04f 140 //__spwf->setTimeout(SPWF_SEND_TIMEOUT);
mridup 0:dc55f40eb04f 141
mridup 0:dc55f40eb04f 142 err = __spwf->socket_client_write((uint8_t)_id, (uint16_t)size, (char*)data);
mridup 0:dc55f40eb04f 143
mridup 0:dc55f40eb04f 144 return err;
mridup 0:dc55f40eb04f 145 }
mridup 0:dc55f40eb04f 146
mridup 0:dc55f40eb04f 147 //return no of bytes read
mridup 0:dc55f40eb04f 148 int32_t SpwfSAInterface::SpwfSASocket::recv(void *data, uint32_t size)
mridup 0:dc55f40eb04f 149 {
mridup 0:dc55f40eb04f 150 int32_t recv;
mridup 0:dc55f40eb04f 151
mridup 0:dc55f40eb04f 152 __spwf->setTimeout(SPWF_RECV_TIMEOUT);
mridup 0:dc55f40eb04f 153
mridup 0:dc55f40eb04f 154 recv = __spwf->socket_client_recv((uint8_t)_id, (uint16_t)size, (char*)data);
mridup 0:dc55f40eb04f 155
mridup 0:dc55f40eb04f 156
mridup 0:dc55f40eb04f 157 return recv;
mridup 0:dc55f40eb04f 158
mridup 0:dc55f40eb04f 159 }
mridup 0:dc55f40eb04f 160
mridup 0:dc55f40eb04f 161 void SpwfSAInterface::debug(const char * string)
mridup 0:dc55f40eb04f 162 {
mridup 0:dc55f40eb04f 163 _spwf.debug_print(string);
mridup 0:dc55f40eb04f 164 }