ESP8266 driver from ARM

Dependents:   8-0_OneNet_IoT_demo STM32F103C8T6_OneNet_IoT

Committer:
TaylorGy
Date:
Wed Mar 29 03:09:15 2017 +0000
Revision:
0:dfb22bd0e039
ESP8266 driver from ARM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TaylorGy 0:dfb22bd0e039 1 /* ESP8266Interface Example
TaylorGy 0:dfb22bd0e039 2 * Copyright (c) 2015 ARM Limited
TaylorGy 0:dfb22bd0e039 3 *
TaylorGy 0:dfb22bd0e039 4 * Licensed under the Apache License, Version 2.0 (the "License");
TaylorGy 0:dfb22bd0e039 5 * you may not use this file except in compliance with the License.
TaylorGy 0:dfb22bd0e039 6 * You may obtain a copy of the License at
TaylorGy 0:dfb22bd0e039 7 *
TaylorGy 0:dfb22bd0e039 8 * http://www.apache.org/licenses/LICENSE-2.0
TaylorGy 0:dfb22bd0e039 9 *
TaylorGy 0:dfb22bd0e039 10 * Unless required by applicable law or agreed to in writing, software
TaylorGy 0:dfb22bd0e039 11 * distributed under the License is distributed on an "AS IS" BASIS,
TaylorGy 0:dfb22bd0e039 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
TaylorGy 0:dfb22bd0e039 13 * See the License for the specific language governing permissions and
TaylorGy 0:dfb22bd0e039 14 * limitations under the License.
TaylorGy 0:dfb22bd0e039 15 */
TaylorGy 0:dfb22bd0e039 16
TaylorGy 0:dfb22bd0e039 17 #ifndef ESP8266_H
TaylorGy 0:dfb22bd0e039 18 #define ESP8266_H
TaylorGy 0:dfb22bd0e039 19
TaylorGy 0:dfb22bd0e039 20 #include "ATParser.h"
TaylorGy 0:dfb22bd0e039 21 #include "mbed.h"
TaylorGy 0:dfb22bd0e039 22
TaylorGy 0:dfb22bd0e039 23
TaylorGy 0:dfb22bd0e039 24
TaylorGy 0:dfb22bd0e039 25 /** ESP8266Interface class.
TaylorGy 0:dfb22bd0e039 26 This is an interface to a ESP8266 radio.
TaylorGy 0:dfb22bd0e039 27 */
TaylorGy 0:dfb22bd0e039 28 class ESP8266
TaylorGy 0:dfb22bd0e039 29 {
TaylorGy 0:dfb22bd0e039 30 public:
TaylorGy 0:dfb22bd0e039 31 ESP8266(PinName tx, PinName rx, bool debug=false);
TaylorGy 0:dfb22bd0e039 32
TaylorGy 0:dfb22bd0e039 33 /**
TaylorGy 0:dfb22bd0e039 34 * Startup the ESP8266
TaylorGy 0:dfb22bd0e039 35 *
TaylorGy 0:dfb22bd0e039 36 * @param mode mode of WIFI 1-client, 2-host, 3-both
TaylorGy 0:dfb22bd0e039 37 * @return true only if ESP8266 was setup correctly
TaylorGy 0:dfb22bd0e039 38 */
TaylorGy 0:dfb22bd0e039 39 bool startup(int mode);
TaylorGy 0:dfb22bd0e039 40
TaylorGy 0:dfb22bd0e039 41 /**
TaylorGy 0:dfb22bd0e039 42 * Reset ESP8266
TaylorGy 0:dfb22bd0e039 43 *
TaylorGy 0:dfb22bd0e039 44 * @return true only if ESP8266 resets successfully
TaylorGy 0:dfb22bd0e039 45 */
TaylorGy 0:dfb22bd0e039 46 bool reset(void);
TaylorGy 0:dfb22bd0e039 47
TaylorGy 0:dfb22bd0e039 48 /**
TaylorGy 0:dfb22bd0e039 49 * Enable/Disable DHCP
TaylorGy 0:dfb22bd0e039 50 *
TaylorGy 0:dfb22bd0e039 51 * @param enabled DHCP enabled when true
TaylorGy 0:dfb22bd0e039 52 * @param mode mode of DHCP 0-softAP, 1-station, 2-both
TaylorGy 0:dfb22bd0e039 53 * @return true only if ESP8266 enables/disables DHCP successfully
TaylorGy 0:dfb22bd0e039 54 */
TaylorGy 0:dfb22bd0e039 55 bool dhcp(bool enabled, int mode);
TaylorGy 0:dfb22bd0e039 56
TaylorGy 0:dfb22bd0e039 57 /**
TaylorGy 0:dfb22bd0e039 58 * Connect ESP8266 to AP
TaylorGy 0:dfb22bd0e039 59 *
TaylorGy 0:dfb22bd0e039 60 * @param ap the name of the AP
TaylorGy 0:dfb22bd0e039 61 * @param passPhrase the password of AP
TaylorGy 0:dfb22bd0e039 62 * @return true only if ESP8266 is connected successfully
TaylorGy 0:dfb22bd0e039 63 */
TaylorGy 0:dfb22bd0e039 64 bool connect(const char *ap, const char *passPhrase);
TaylorGy 0:dfb22bd0e039 65
TaylorGy 0:dfb22bd0e039 66 /**
TaylorGy 0:dfb22bd0e039 67 * Disconnect ESP8266 from AP
TaylorGy 0:dfb22bd0e039 68 *
TaylorGy 0:dfb22bd0e039 69 * @return true only if ESP8266 is disconnected successfully
TaylorGy 0:dfb22bd0e039 70 */
TaylorGy 0:dfb22bd0e039 71 bool disconnect(void);
TaylorGy 0:dfb22bd0e039 72
TaylorGy 0:dfb22bd0e039 73 /**
TaylorGy 0:dfb22bd0e039 74 * Get the IP address of ESP8266
TaylorGy 0:dfb22bd0e039 75 *
TaylorGy 0:dfb22bd0e039 76 * @return null-teriminated IP address or null if no IP address is assigned
TaylorGy 0:dfb22bd0e039 77 */
TaylorGy 0:dfb22bd0e039 78 const char *getIPAddress(void);
TaylorGy 0:dfb22bd0e039 79
TaylorGy 0:dfb22bd0e039 80 /**
TaylorGy 0:dfb22bd0e039 81 * Get the MAC address of ESP8266
TaylorGy 0:dfb22bd0e039 82 *
TaylorGy 0:dfb22bd0e039 83 * @return null-terminated MAC address or null if no MAC address is assigned
TaylorGy 0:dfb22bd0e039 84 */
TaylorGy 0:dfb22bd0e039 85 const char *getMACAddress(void);
TaylorGy 0:dfb22bd0e039 86
TaylorGy 0:dfb22bd0e039 87 /** Get the local gateway
TaylorGy 0:dfb22bd0e039 88 *
TaylorGy 0:dfb22bd0e039 89 * @return Null-terminated representation of the local gateway
TaylorGy 0:dfb22bd0e039 90 * or null if no network mask has been recieved
TaylorGy 0:dfb22bd0e039 91 */
TaylorGy 0:dfb22bd0e039 92 const char *getGateway();
TaylorGy 0:dfb22bd0e039 93
TaylorGy 0:dfb22bd0e039 94 /** Get the local network mask
TaylorGy 0:dfb22bd0e039 95 *
TaylorGy 0:dfb22bd0e039 96 * @return Null-terminated representation of the local network mask
TaylorGy 0:dfb22bd0e039 97 * or null if no network mask has been recieved
TaylorGy 0:dfb22bd0e039 98 */
TaylorGy 0:dfb22bd0e039 99 const char *getNetmask();
TaylorGy 0:dfb22bd0e039 100
TaylorGy 0:dfb22bd0e039 101 /* Return RSSI for active connection
TaylorGy 0:dfb22bd0e039 102 *
TaylorGy 0:dfb22bd0e039 103 * @return Measured RSSI
TaylorGy 0:dfb22bd0e039 104 */
TaylorGy 0:dfb22bd0e039 105 int8_t getRSSI();
TaylorGy 0:dfb22bd0e039 106
TaylorGy 0:dfb22bd0e039 107 /**
TaylorGy 0:dfb22bd0e039 108 * Check if ESP8266 is conenected
TaylorGy 0:dfb22bd0e039 109 *
TaylorGy 0:dfb22bd0e039 110 * @return true only if the chip has an IP address
TaylorGy 0:dfb22bd0e039 111 */
TaylorGy 0:dfb22bd0e039 112 bool isConnected(void);
TaylorGy 0:dfb22bd0e039 113
TaylorGy 0:dfb22bd0e039 114 /** Scan for available networks
TaylorGy 0:dfb22bd0e039 115 *
TaylorGy 0:dfb22bd0e039 116 * @param ap Pointer to allocated array to store discovered AP
TaylorGy 0:dfb22bd0e039 117 * @param limit Size of allocated @a res array, or 0 to only count available AP
TaylorGy 0:dfb22bd0e039 118 * @return Number of entries in @a res, or if @a count was 0 number of available networks, negative on error
TaylorGy 0:dfb22bd0e039 119 * see @a nsapi_error
TaylorGy 0:dfb22bd0e039 120 */
TaylorGy 0:dfb22bd0e039 121 int scan(WiFiAccessPoint *res, unsigned limit);
TaylorGy 0:dfb22bd0e039 122
TaylorGy 0:dfb22bd0e039 123 /**
TaylorGy 0:dfb22bd0e039 124 * Open a socketed connection
TaylorGy 0:dfb22bd0e039 125 *
TaylorGy 0:dfb22bd0e039 126 * @param type the type of socket to open "UDP" or "TCP"
TaylorGy 0:dfb22bd0e039 127 * @param id id to give the new socket, valid 0-4
TaylorGy 0:dfb22bd0e039 128 * @param port port to open connection with
TaylorGy 0:dfb22bd0e039 129 * @param addr the IP address of the destination
TaylorGy 0:dfb22bd0e039 130 * @return true only if socket opened successfully
TaylorGy 0:dfb22bd0e039 131 */
TaylorGy 0:dfb22bd0e039 132 bool open(const char *type, int id, const char* addr, int port);
TaylorGy 0:dfb22bd0e039 133
TaylorGy 0:dfb22bd0e039 134 /**
TaylorGy 0:dfb22bd0e039 135 * Check socket connection status
TaylorGy 0:dfb22bd0e039 136 *
TaylorGy 0:dfb22bd0e039 137 * @return 0 socket conneceted successfully
TaylorGy 0:dfb22bd0e039 138 * -1 unknown error
TaylorGy 0:dfb22bd0e039 139 * -2 connected to ap, get an ip address
TaylorGy 0:dfb22bd0e039 140 * -4 lost connection
TaylorGy 0:dfb22bd0e039 141 * -5 unconnected to ap
TaylorGy 0:dfb22bd0e039 142 */
TaylorGy 0:dfb22bd0e039 143 int isOpen(void);
TaylorGy 0:dfb22bd0e039 144
TaylorGy 0:dfb22bd0e039 145 /**
TaylorGy 0:dfb22bd0e039 146 * Sends data to an open socket
TaylorGy 0:dfb22bd0e039 147 *
TaylorGy 0:dfb22bd0e039 148 * @param id id of socket to send to
TaylorGy 0:dfb22bd0e039 149 * @param data data to be sent
TaylorGy 0:dfb22bd0e039 150 * @param amount amount of data to be sent - max 1024
TaylorGy 0:dfb22bd0e039 151 * @return true only if data sent successfully
TaylorGy 0:dfb22bd0e039 152 */
TaylorGy 0:dfb22bd0e039 153 bool send(int id, const void *data, uint32_t amount);
TaylorGy 0:dfb22bd0e039 154
TaylorGy 0:dfb22bd0e039 155 /**
TaylorGy 0:dfb22bd0e039 156 * Receives data from an open socket
TaylorGy 0:dfb22bd0e039 157 *
TaylorGy 0:dfb22bd0e039 158 * @param id id to receive from
TaylorGy 0:dfb22bd0e039 159 * @param data placeholder for returned information
TaylorGy 0:dfb22bd0e039 160 * @param amount number of bytes to be received
TaylorGy 0:dfb22bd0e039 161 * @return the number of bytes received
TaylorGy 0:dfb22bd0e039 162 */
TaylorGy 0:dfb22bd0e039 163 int32_t recv(int id, void *data, uint32_t amount);
TaylorGy 0:dfb22bd0e039 164
TaylorGy 0:dfb22bd0e039 165 /**
TaylorGy 0:dfb22bd0e039 166 * Closes a socket
TaylorGy 0:dfb22bd0e039 167 *
TaylorGy 0:dfb22bd0e039 168 * @param id id of socket to close, valid only 0-4
TaylorGy 0:dfb22bd0e039 169 * @return true only if socket is closed successfully
TaylorGy 0:dfb22bd0e039 170 */
TaylorGy 0:dfb22bd0e039 171 bool close(int id);
TaylorGy 0:dfb22bd0e039 172
TaylorGy 0:dfb22bd0e039 173 /**
TaylorGy 0:dfb22bd0e039 174 * Allows timeout to be changed between commands
TaylorGy 0:dfb22bd0e039 175 *
TaylorGy 0:dfb22bd0e039 176 * @param timeout_ms timeout of the connection
TaylorGy 0:dfb22bd0e039 177 */
TaylorGy 0:dfb22bd0e039 178 void setTimeout(uint32_t timeout_ms);
TaylorGy 0:dfb22bd0e039 179
TaylorGy 0:dfb22bd0e039 180 /**
TaylorGy 0:dfb22bd0e039 181 * Checks if data is available
TaylorGy 0:dfb22bd0e039 182 */
TaylorGy 0:dfb22bd0e039 183 bool readable();
TaylorGy 0:dfb22bd0e039 184
TaylorGy 0:dfb22bd0e039 185 /**
TaylorGy 0:dfb22bd0e039 186 * Checks if data can be written
TaylorGy 0:dfb22bd0e039 187 */
TaylorGy 0:dfb22bd0e039 188 bool writeable();
TaylorGy 0:dfb22bd0e039 189
TaylorGy 0:dfb22bd0e039 190 /**
TaylorGy 0:dfb22bd0e039 191 * Attach a function to call whenever network state has changed
TaylorGy 0:dfb22bd0e039 192 *
TaylorGy 0:dfb22bd0e039 193 * @param func A pointer to a void function, or 0 to set as none
TaylorGy 0:dfb22bd0e039 194 */
TaylorGy 0:dfb22bd0e039 195 void attach(Callback<void()> func);
TaylorGy 0:dfb22bd0e039 196
TaylorGy 0:dfb22bd0e039 197 /**
TaylorGy 0:dfb22bd0e039 198 * Attach a function to call whenever network state has changed
TaylorGy 0:dfb22bd0e039 199 *
TaylorGy 0:dfb22bd0e039 200 * @param obj pointer to the object to call the member function on
TaylorGy 0:dfb22bd0e039 201 * @param method pointer to the member function to call
TaylorGy 0:dfb22bd0e039 202 */
TaylorGy 0:dfb22bd0e039 203 template <typename T, typename M>
TaylorGy 0:dfb22bd0e039 204 void attach(T *obj, M method) {
TaylorGy 0:dfb22bd0e039 205 attach(Callback<void()>(obj, method));
TaylorGy 0:dfb22bd0e039 206 }
TaylorGy 0:dfb22bd0e039 207
TaylorGy 0:dfb22bd0e039 208 private:
TaylorGy 0:dfb22bd0e039 209 BufferedSerial _serial;
TaylorGy 0:dfb22bd0e039 210 ATParser _parser;
TaylorGy 0:dfb22bd0e039 211
TaylorGy 0:dfb22bd0e039 212 struct packet {
TaylorGy 0:dfb22bd0e039 213 struct packet *next;
TaylorGy 0:dfb22bd0e039 214 int id;
TaylorGy 0:dfb22bd0e039 215 uint32_t len;
TaylorGy 0:dfb22bd0e039 216 // data follows
TaylorGy 0:dfb22bd0e039 217 } *_packets, **_packets_end;
TaylorGy 0:dfb22bd0e039 218 void _packet_handler();
TaylorGy 0:dfb22bd0e039 219 bool recv_ap(nsapi_wifi_ap_t *ap);
TaylorGy 0:dfb22bd0e039 220
TaylorGy 0:dfb22bd0e039 221 char _ip_buffer[16];
TaylorGy 0:dfb22bd0e039 222 char _gateway_buffer[16];
TaylorGy 0:dfb22bd0e039 223 char _netmask_buffer[16];
TaylorGy 0:dfb22bd0e039 224 char _mac_buffer[18];
TaylorGy 0:dfb22bd0e039 225 };
TaylorGy 0:dfb22bd0e039 226
TaylorGy 0:dfb22bd0e039 227
TaylorGy 0:dfb22bd0e039 228 #endif