123

Fork of WizFi250Interface_1 by cliff Hong

Committer:
cliff1
Date:
Thu Sep 21 01:01:02 2017 +0000
Revision:
3:f78b0e66ed67
Parent:
1:046a828fe0d2
test20170921

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kaizen 0:e3dc9e54a15b 1 /* WizFi250 implementation of NetworkInterfaceAPI
kaizen 0:e3dc9e54a15b 2 * Copyright (c) 2015 ARM Limited
kaizen 0:e3dc9e54a15b 3 *
kaizen 0:e3dc9e54a15b 4 * Licensed under the Apache License, Version 2.0 (the "License");
kaizen 0:e3dc9e54a15b 5 * you may not use this file except in compliance with the License.
kaizen 0:e3dc9e54a15b 6 * You may obtain a copy of the License at
kaizen 0:e3dc9e54a15b 7 *
kaizen 0:e3dc9e54a15b 8 * http://www.apache.org/licenses/LICENSE-2.0
kaizen 0:e3dc9e54a15b 9 *
kaizen 0:e3dc9e54a15b 10 * Unless required by applicable law or agreed to in writing, software
kaizen 0:e3dc9e54a15b 11 * distributed under the License is distributed on an "AS IS" BASIS,
kaizen 0:e3dc9e54a15b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kaizen 0:e3dc9e54a15b 13 * See the License for the specific language governing permissions and
kaizen 0:e3dc9e54a15b 14 * limitations under the License.
kaizen 0:e3dc9e54a15b 15 */
kaizen 0:e3dc9e54a15b 16
kaizen 0:e3dc9e54a15b 17 #ifndef WIZFI250_INTERFACE_H
kaizen 0:e3dc9e54a15b 18 #define WIZFI250_INTERFACE_H
kaizen 0:e3dc9e54a15b 19
cliff1 1:046a828fe0d2 20 #include "mbed.h"
kaizen 0:e3dc9e54a15b 21 #include "WizFi250.h"
kaizen 0:e3dc9e54a15b 22
kaizen 0:e3dc9e54a15b 23 #define WIZFI250_SOCKET_COUNT 8
kaizen 0:e3dc9e54a15b 24
kaizen 0:e3dc9e54a15b 25 /** WizFi250Interface class
kaizen 0:e3dc9e54a15b 26 * Implementation of the NetworkStack for the WizFi250
kaizen 0:e3dc9e54a15b 27 */
kaizen 0:e3dc9e54a15b 28 class WizFi250Interface : public NetworkStack, public WiFiInterface
kaizen 0:e3dc9e54a15b 29 {
kaizen 0:e3dc9e54a15b 30 public:
kaizen 0:e3dc9e54a15b 31 WizFi250Interface(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud=115200 );
cliff1 1:046a828fe0d2 32
cliff1 1:046a828fe0d2 33 virtual int connect();
kaizen 0:e3dc9e54a15b 34
kaizen 0:e3dc9e54a15b 35 virtual int connect(
kaizen 0:e3dc9e54a15b 36 const char *ssid,
kaizen 0:e3dc9e54a15b 37 const char *pass,
cliff1 1:046a828fe0d2 38 nsapi_security_t security = NSAPI_SECURITY_NONE,
cliff1 1:046a828fe0d2 39 uint8_t channel = 0);
kaizen 0:e3dc9e54a15b 40
kaizen 0:e3dc9e54a15b 41 /** Stop the interface
kaizen 0:e3dc9e54a15b 42 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 43 */
cliff1 1:046a828fe0d2 44
cliff1 1:046a828fe0d2 45 virtual int set_credentials(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE);
cliff1 1:046a828fe0d2 46
cliff1 1:046a828fe0d2 47 virtual int set_channel(uint8_t channel);
cliff1 1:046a828fe0d2 48
kaizen 0:e3dc9e54a15b 49 virtual int disconnect();
kaizen 0:e3dc9e54a15b 50
kaizen 0:e3dc9e54a15b 51 /** Get the internally stored IP address
kaizen 0:e3dc9e54a15b 52 * @return IP address of the interface or null if not yet connected
kaizen 0:e3dc9e54a15b 53 */
kaizen 0:e3dc9e54a15b 54 virtual const char *get_ip_address();
kaizen 0:e3dc9e54a15b 55
kaizen 0:e3dc9e54a15b 56 /** Get the internally stored MAC address
kaizen 0:e3dc9e54a15b 57 * @return MAC address of the interface
kaizen 0:e3dc9e54a15b 58 */
kaizen 0:e3dc9e54a15b 59 virtual const char *get_mac_address();
cliff1 1:046a828fe0d2 60
cliff1 1:046a828fe0d2 61 virtual const char *get_gateway() { };
cliff1 1:046a828fe0d2 62
cliff1 1:046a828fe0d2 63 virtual const char *get_netmask() { };
cliff1 1:046a828fe0d2 64
cliff1 1:046a828fe0d2 65 virtual int8_t get_rssi() { };
cliff1 1:046a828fe0d2 66
cliff1 1:046a828fe0d2 67
cliff1 1:046a828fe0d2 68 virtual int scan(WiFiAccessPoint *res, unsigned count) { };
cliff1 1:046a828fe0d2 69
cliff1 1:046a828fe0d2 70 using NetworkInterface::gethostbyname;
cliff1 1:046a828fe0d2 71 using NetworkInterface::add_dns_server;
kaizen 0:e3dc9e54a15b 72
kaizen 0:e3dc9e54a15b 73 protected:
kaizen 0:e3dc9e54a15b 74 /** Open a socket
kaizen 0:e3dc9e54a15b 75 * @param handle Handle in which to store new socket
kaizen 0:e3dc9e54a15b 76 * @param proto Type of socket to open, NSAPI_TCP or NSAPI_UDP
kaizen 0:e3dc9e54a15b 77 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 78 */
kaizen 0:e3dc9e54a15b 79 virtual int socket_open(void **handle, nsapi_protocol_t proto);
kaizen 0:e3dc9e54a15b 80
kaizen 0:e3dc9e54a15b 81 /** Close the socket
kaizen 0:e3dc9e54a15b 82 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 83 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 84 * @note On failure, any memory associated with the socket must still
kaizen 0:e3dc9e54a15b 85 * be cleaned up
kaizen 0:e3dc9e54a15b 86 */
kaizen 0:e3dc9e54a15b 87 virtual int socket_close(void *handle);
kaizen 0:e3dc9e54a15b 88
kaizen 0:e3dc9e54a15b 89 /** Bind a server socket to a specific port
kaizen 0:e3dc9e54a15b 90 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 91 * @param address Local address to listen for incoming connections on
kaizen 0:e3dc9e54a15b 92 * @return 0 on success, negative on failure.
kaizen 0:e3dc9e54a15b 93 */
kaizen 0:e3dc9e54a15b 94 virtual int socket_bind(void *handle, const SocketAddress &address);
kaizen 0:e3dc9e54a15b 95
kaizen 0:e3dc9e54a15b 96 /** Start listening for incoming connections
kaizen 0:e3dc9e54a15b 97 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 98 * @param backlog Number of pending connections that can be queued up at any
kaizen 0:e3dc9e54a15b 99 * one time [Default: 1]
kaizen 0:e3dc9e54a15b 100 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 101 */
kaizen 0:e3dc9e54a15b 102 virtual int socket_listen(void *handle, int backlog);
kaizen 0:e3dc9e54a15b 103
kaizen 0:e3dc9e54a15b 104 /** Connects this TCP socket to the server
kaizen 0:e3dc9e54a15b 105 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 106 * @param address SocketAddress to connect to
kaizen 0:e3dc9e54a15b 107 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 108 */
kaizen 0:e3dc9e54a15b 109 virtual int socket_connect(void *handle, const SocketAddress &address);
kaizen 0:e3dc9e54a15b 110
kaizen 0:e3dc9e54a15b 111 /** Accept a new connection.
kaizen 0:e3dc9e54a15b 112 * @param handle Handle in which to store new socket
kaizen 0:e3dc9e54a15b 113 * @param server Socket handle to server to accept from
kaizen 0:e3dc9e54a15b 114 * @return 0 on success, negative on failure
kaizen 0:e3dc9e54a15b 115 * @note This call is not-blocking, if this call would block, must
kaizen 0:e3dc9e54a15b 116 * immediately return NSAPI_ERROR_WOULD_WAIT
kaizen 0:e3dc9e54a15b 117 */
cliff1 1:046a828fe0d2 118 //virtual int socket_accept(void **handle, void *server);
cliff1 1:046a828fe0d2 119 virtual int socket_accept(void *handle, void **socket, SocketAddress *address);
kaizen 0:e3dc9e54a15b 120
kaizen 0:e3dc9e54a15b 121 /** Send data to the remote host
kaizen 0:e3dc9e54a15b 122 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 123 * @param data The buffer to send to the host
kaizen 0:e3dc9e54a15b 124 * @param size The length of the buffer to send
kaizen 0:e3dc9e54a15b 125 * @return Number of written bytes on success, negative on failure
kaizen 0:e3dc9e54a15b 126 * @note This call is not-blocking, if this call would block, must
kaizen 0:e3dc9e54a15b 127 * immediately return NSAPI_ERROR_WOULD_WAIT
kaizen 0:e3dc9e54a15b 128 */
kaizen 0:e3dc9e54a15b 129 virtual int socket_send(void *handle, const void *data, unsigned size);
kaizen 0:e3dc9e54a15b 130
kaizen 0:e3dc9e54a15b 131 /** Receive data from the remote host
kaizen 0:e3dc9e54a15b 132 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 133 * @param data The buffer in which to store the data received from the host
kaizen 0:e3dc9e54a15b 134 * @param size The maximum length of the buffer
kaizen 0:e3dc9e54a15b 135 * @return Number of received bytes on success, negative on failure
kaizen 0:e3dc9e54a15b 136 * @note This call is not-blocking, if this call would block, must
kaizen 0:e3dc9e54a15b 137 * immediately return NSAPI_ERROR_WOULD_WAIT
kaizen 0:e3dc9e54a15b 138 */
kaizen 0:e3dc9e54a15b 139 virtual int socket_recv(void *handle, void *data, unsigned size);
kaizen 0:e3dc9e54a15b 140
kaizen 0:e3dc9e54a15b 141 /** Send a packet to a remote endpoint
kaizen 0:e3dc9e54a15b 142 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 143 * @param address The remote SocketAddress
kaizen 0:e3dc9e54a15b 144 * @param data The packet to be sent
kaizen 0:e3dc9e54a15b 145 * @param size The length of the packet to be sent
kaizen 0:e3dc9e54a15b 146 * @return The number of written bytes on success, negative on failure
kaizen 0:e3dc9e54a15b 147 * @note This call is not-blocking, if this call would block, must
kaizen 0:e3dc9e54a15b 148 * immediately return NSAPI_ERROR_WOULD_WAIT
kaizen 0:e3dc9e54a15b 149 */
kaizen 0:e3dc9e54a15b 150 virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size);
kaizen 0:e3dc9e54a15b 151
kaizen 0:e3dc9e54a15b 152 /** Receive a packet from a remote endpoint
kaizen 0:e3dc9e54a15b 153 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 154 * @param address Destination for the remote SocketAddress or null
kaizen 0:e3dc9e54a15b 155 * @param buffer The buffer for storing the incoming packet data
kaizen 0:e3dc9e54a15b 156 * If a packet is too long to fit in the supplied buffer,
kaizen 0:e3dc9e54a15b 157 * excess bytes are discarded
kaizen 0:e3dc9e54a15b 158 * @param size The length of the buffer
kaizen 0:e3dc9e54a15b 159 * @return The number of received bytes on success, negative on failure
kaizen 0:e3dc9e54a15b 160 * @note This call is not-blocking, if this call would block, must
kaizen 0:e3dc9e54a15b 161 * immediately return NSAPI_ERROR_WOULD_WAIT
kaizen 0:e3dc9e54a15b 162 */
kaizen 0:e3dc9e54a15b 163 virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size);
kaizen 0:e3dc9e54a15b 164
kaizen 0:e3dc9e54a15b 165 /** Register a callback on state change of the socket
kaizen 0:e3dc9e54a15b 166 * @param handle Socket handle
kaizen 0:e3dc9e54a15b 167 * @param callback Function to call on state change
kaizen 0:e3dc9e54a15b 168 * @param data Argument to pass to callback
kaizen 0:e3dc9e54a15b 169 * @note Callback may be called in an interrupt context.
kaizen 0:e3dc9e54a15b 170 */
kaizen 0:e3dc9e54a15b 171 virtual void socket_attach(void *handle, void (*callback)(void *), void *data);
cliff1 1:046a828fe0d2 172
cliff1 1:046a828fe0d2 173 virtual NetworkStack *get_stack()
cliff1 1:046a828fe0d2 174 {
cliff1 1:046a828fe0d2 175 return this;
cliff1 1:046a828fe0d2 176 }
kaizen 0:e3dc9e54a15b 177
kaizen 0:e3dc9e54a15b 178 private:
kaizen 0:e3dc9e54a15b 179 WizFi250 _wizfi250;
kaizen 0:e3dc9e54a15b 180 bool _ids[WIZFI250_SOCKET_COUNT];
kaizen 0:e3dc9e54a15b 181 };
kaizen 0:e3dc9e54a15b 182
kaizen 0:e3dc9e54a15b 183 #endif
kaizen 0:e3dc9e54a15b 184