The driver for the ESP32 WiFi module

The ESP32 WiFi driver for Mbed OS

The Mbed OS driver for the ESP32 WiFi module.

Firmware version

How to write mbed-os compatible firmware : https://github.com/d-kato/GR-Boards_ESP32_Serial_Bridge

Restrictions

  • Setting up an UDP server is not possible
  • The serial port does not have hardware flow control enabled. The AT command set does not either have a way to limit the download rate. Therefore, downloading anything larger than the serial port input buffer is unreliable. An application should be able to read fast enough to stay ahead of the network. This affects mostly the TCP protocol where data would be lost with no notification. On UDP, this would lead to only packet losses which the higher layer protocol should recover from.

Committer:
dkato
Date:
Mon Jul 09 10:26:03 2018 +0000
Revision:
2:cb5c0d3fa776
Parent:
1:5d78eedef723
Synchronized with git revision 78a139f3bce17e23f2b4bd9342dd7adca023d248

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:92d12d355ba9 1 /* ESP32 implementation of NetworkInterfaceAPI
dkato 0:92d12d355ba9 2 * Copyright (c) 2015 ARM Limited
dkato 0:92d12d355ba9 3 * Copyright (c) 2017 Renesas Electronics Corporation
dkato 0:92d12d355ba9 4 *
dkato 0:92d12d355ba9 5 * Licensed under the Apache License, Version 2.0 (the "License");
dkato 0:92d12d355ba9 6 * you may not use this file except in compliance with the License.
dkato 0:92d12d355ba9 7 * You may obtain a copy of the License at
dkato 0:92d12d355ba9 8 *
dkato 0:92d12d355ba9 9 * http://www.apache.org/licenses/LICENSE-2.0
dkato 0:92d12d355ba9 10 *
dkato 0:92d12d355ba9 11 * Unless required by applicable law or agreed to in writing, software
dkato 0:92d12d355ba9 12 * distributed under the License is distributed on an "AS IS" BASIS,
dkato 0:92d12d355ba9 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dkato 0:92d12d355ba9 14 * See the License for the specific language governing permissions and
dkato 0:92d12d355ba9 15 * limitations under the License.
dkato 0:92d12d355ba9 16 */
dkato 0:92d12d355ba9 17
dkato 0:92d12d355ba9 18 #ifndef ESP32_STACK_H
dkato 0:92d12d355ba9 19 #define ESP32_STACK_H
dkato 0:92d12d355ba9 20
dkato 0:92d12d355ba9 21 #include "mbed.h"
dkato 0:92d12d355ba9 22 #include "ESP32.h"
dkato 0:92d12d355ba9 23
dkato 0:92d12d355ba9 24 /** ESP32Stack class
dkato 0:92d12d355ba9 25 * Implementation of the NetworkStack for the ESP32
dkato 0:92d12d355ba9 26 */
dkato 0:92d12d355ba9 27 class ESP32Stack : public NetworkStack
dkato 0:92d12d355ba9 28 {
dkato 0:92d12d355ba9 29 protected:
dkato 0:92d12d355ba9 30 /** ESP32Stack lifetime
dkato 0:92d12d355ba9 31 * @param en EN pin
dkato 0:92d12d355ba9 32 * @param io0 IO0 pin
dkato 0:92d12d355ba9 33 * @param tx TX pin
dkato 0:92d12d355ba9 34 * @param rx RX pin
dkato 0:92d12d355ba9 35 * @param debug Enable debugging
dkato 1:5d78eedef723 36 * @param rts RTS pin
dkato 1:5d78eedef723 37 * @param cts CTS pin
dkato 0:92d12d355ba9 38 * @param baudrate The baudrate of the serial port.
dkato 0:92d12d355ba9 39 */
dkato 1:5d78eedef723 40 ESP32Stack(PinName en, PinName io0, PinName tx, PinName rx, bool debug,
dkato 1:5d78eedef723 41 PinName rts, PinName cts, int baudrate);
dkato 0:92d12d355ba9 42
dkato 0:92d12d355ba9 43 protected:
dkato 0:92d12d355ba9 44 /** Open a socket
dkato 0:92d12d355ba9 45 * @param handle Handle in which to store new socket
dkato 0:92d12d355ba9 46 * @param proto Type of socket to open, NSAPI_TCP or NSAPI_UDP
dkato 0:92d12d355ba9 47 * @return 0 on success, negative on failure
dkato 0:92d12d355ba9 48 */
dkato 0:92d12d355ba9 49 virtual int socket_open(void **handle, nsapi_protocol_t proto);
dkato 0:92d12d355ba9 50
dkato 0:92d12d355ba9 51 /** Close the socket
dkato 0:92d12d355ba9 52 * @param handle Socket handle
dkato 0:92d12d355ba9 53 * @return 0 on success, negative on failure
dkato 0:92d12d355ba9 54 * @note On failure, any memory associated with the socket must still
dkato 0:92d12d355ba9 55 * be cleaned up
dkato 0:92d12d355ba9 56 */
dkato 0:92d12d355ba9 57 virtual int socket_close(void *handle);
dkato 0:92d12d355ba9 58
dkato 0:92d12d355ba9 59 /** Bind a server socket to a specific port
dkato 0:92d12d355ba9 60 * @param handle Socket handle
dkato 0:92d12d355ba9 61 * @param address Local address to listen for incoming connections on
dkato 0:92d12d355ba9 62 * @return 0 on success, negative on failure.
dkato 0:92d12d355ba9 63 */
dkato 0:92d12d355ba9 64 virtual int socket_bind(void *handle, const SocketAddress &address);
dkato 0:92d12d355ba9 65
dkato 0:92d12d355ba9 66 /** Start listening for incoming connections
dkato 0:92d12d355ba9 67 * @param handle Socket handle
dkato 0:92d12d355ba9 68 * @param backlog Number of pending connections that can be queued up at any
dkato 0:92d12d355ba9 69 * one time [Default: 1]
dkato 0:92d12d355ba9 70 * @return 0 on success, negative on failure
dkato 0:92d12d355ba9 71 */
dkato 0:92d12d355ba9 72 virtual int socket_listen(void *handle, int backlog);
dkato 0:92d12d355ba9 73
dkato 0:92d12d355ba9 74 /** Connects this TCP socket to the server
dkato 0:92d12d355ba9 75 * @param handle Socket handle
dkato 0:92d12d355ba9 76 * @param address SocketAddress to connect to
dkato 0:92d12d355ba9 77 * @return 0 on success, negative on failure
dkato 0:92d12d355ba9 78 */
dkato 0:92d12d355ba9 79 virtual int socket_connect(void *handle, const SocketAddress &address);
dkato 0:92d12d355ba9 80
dkato 0:92d12d355ba9 81 /** Accept a new connection.
dkato 0:92d12d355ba9 82 * @param handle Handle in which to store new socket
dkato 0:92d12d355ba9 83 * @param server Socket handle to server to accept from
dkato 0:92d12d355ba9 84 * @return 0 on success, negative on failure
dkato 0:92d12d355ba9 85 * @note This call is not-blocking, if this call would block, must
dkato 0:92d12d355ba9 86 * immediately return NSAPI_ERROR_WOULD_WAIT
dkato 0:92d12d355ba9 87 */
dkato 0:92d12d355ba9 88 virtual int socket_accept(void *handle, void **socket, SocketAddress *address);
dkato 0:92d12d355ba9 89
dkato 0:92d12d355ba9 90 /** Send data to the remote host
dkato 0:92d12d355ba9 91 * @param handle Socket handle
dkato 0:92d12d355ba9 92 * @param data The buffer to send to the host
dkato 0:92d12d355ba9 93 * @param size The length of the buffer to send
dkato 0:92d12d355ba9 94 * @return Number of written bytes on success, negative on failure
dkato 0:92d12d355ba9 95 * @note This call is not-blocking, if this call would block, must
dkato 0:92d12d355ba9 96 * immediately return NSAPI_ERROR_WOULD_WAIT
dkato 0:92d12d355ba9 97 */
dkato 0:92d12d355ba9 98 virtual int socket_send(void *handle, const void *data, unsigned size);
dkato 0:92d12d355ba9 99
dkato 0:92d12d355ba9 100 /** Receive data from the remote host
dkato 0:92d12d355ba9 101 * @param handle Socket handle
dkato 0:92d12d355ba9 102 * @param data The buffer in which to store the data received from the host
dkato 0:92d12d355ba9 103 * @param size The maximum length of the buffer
dkato 0:92d12d355ba9 104 * @return Number of received bytes on success, negative on failure
dkato 0:92d12d355ba9 105 * @note This call is not-blocking, if this call would block, must
dkato 0:92d12d355ba9 106 * immediately return NSAPI_ERROR_WOULD_WAIT
dkato 0:92d12d355ba9 107 */
dkato 0:92d12d355ba9 108 virtual int socket_recv(void *handle, void *data, unsigned size);
dkato 0:92d12d355ba9 109
dkato 0:92d12d355ba9 110 /** Send a packet to a remote endpoint
dkato 0:92d12d355ba9 111 * @param handle Socket handle
dkato 0:92d12d355ba9 112 * @param address The remote SocketAddress
dkato 0:92d12d355ba9 113 * @param data The packet to be sent
dkato 0:92d12d355ba9 114 * @param size The length of the packet to be sent
dkato 0:92d12d355ba9 115 * @return The number of written bytes on success, negative on failure
dkato 0:92d12d355ba9 116 * @note This call is not-blocking, if this call would block, must
dkato 0:92d12d355ba9 117 * immediately return NSAPI_ERROR_WOULD_WAIT
dkato 0:92d12d355ba9 118 */
dkato 0:92d12d355ba9 119 virtual int socket_sendto(void *handle, const SocketAddress &address, const void *data, unsigned size);
dkato 0:92d12d355ba9 120
dkato 0:92d12d355ba9 121 /** Receive a packet from a remote endpoint
dkato 0:92d12d355ba9 122 * @param handle Socket handle
dkato 0:92d12d355ba9 123 * @param address Destination for the remote SocketAddress or null
dkato 0:92d12d355ba9 124 * @param buffer The buffer for storing the incoming packet data
dkato 0:92d12d355ba9 125 * If a packet is too long to fit in the supplied buffer,
dkato 0:92d12d355ba9 126 * excess bytes are discarded
dkato 0:92d12d355ba9 127 * @param size The length of the buffer
dkato 0:92d12d355ba9 128 * @return The number of received bytes on success, negative on failure
dkato 0:92d12d355ba9 129 * @note This call is not-blocking, if this call would block, must
dkato 0:92d12d355ba9 130 * immediately return NSAPI_ERROR_WOULD_WAIT
dkato 0:92d12d355ba9 131 */
dkato 0:92d12d355ba9 132 virtual int socket_recvfrom(void *handle, SocketAddress *address, void *buffer, unsigned size);
dkato 0:92d12d355ba9 133
dkato 0:92d12d355ba9 134 /** Register a callback on state change of the socket
dkato 0:92d12d355ba9 135 * @param handle Socket handle
dkato 0:92d12d355ba9 136 * @param callback Function to call on state change
dkato 0:92d12d355ba9 137 * @param data Argument to pass to callback
dkato 0:92d12d355ba9 138 * @note Callback may be called in an interrupt context.
dkato 0:92d12d355ba9 139 */
dkato 0:92d12d355ba9 140 virtual void socket_attach(void *handle, void (*callback)(void *), void *data);
dkato 0:92d12d355ba9 141
dkato 0:92d12d355ba9 142 /** Set stack-specific socket options
dkato 0:92d12d355ba9 143 * The setsockopt allow an application to pass stack-specific hints
dkato 0:92d12d355ba9 144 * to the underlying stack. For unsupported options,
dkato 0:92d12d355ba9 145 * NSAPI_ERROR_UNSUPPORTED is returned and the socket is unmodified.
dkato 0:92d12d355ba9 146 *
dkato 0:92d12d355ba9 147 * @param handle Socket handle
dkato 0:92d12d355ba9 148 * @param level Stack-specific protocol level
dkato 0:92d12d355ba9 149 * @param optname Stack-specific option identifier
dkato 0:92d12d355ba9 150 * @param optval Option value
dkato 0:92d12d355ba9 151 * @param optlen Length of the option value
dkato 0:92d12d355ba9 152 * @return 0 on success, negative error code on failure
dkato 0:92d12d355ba9 153 */
dkato 0:92d12d355ba9 154 virtual nsapi_error_t setsockopt(nsapi_socket_t handle, int level,
dkato 0:92d12d355ba9 155 int optname, const void *optval, unsigned optlen);
dkato 0:92d12d355ba9 156
dkato 0:92d12d355ba9 157 /** Get stack-specific socket options
dkato 0:92d12d355ba9 158 * The getstackopt allow an application to retrieve stack-specific hints
dkato 0:92d12d355ba9 159 * from the underlying stack. For unsupported options,
dkato 0:92d12d355ba9 160 * NSAPI_ERROR_UNSUPPORTED is returned and optval is unmodified.
dkato 0:92d12d355ba9 161 *
dkato 0:92d12d355ba9 162 * @param handle Socket handle
dkato 0:92d12d355ba9 163 * @param level Stack-specific protocol level
dkato 0:92d12d355ba9 164 * @param optname Stack-specific option identifier
dkato 0:92d12d355ba9 165 * @param optval Destination for option value
dkato 0:92d12d355ba9 166 * @param optlen Length of the option value
dkato 0:92d12d355ba9 167 * @return 0 on success, negative error code on failure
dkato 0:92d12d355ba9 168 */
dkato 0:92d12d355ba9 169 virtual nsapi_error_t getsockopt(nsapi_socket_t handle, int level,
dkato 0:92d12d355ba9 170 int optname, void *optval, unsigned *optlen);
dkato 0:92d12d355ba9 171
dkato 0:92d12d355ba9 172 protected:
dkato 0:92d12d355ba9 173 ESP32 *_esp;
dkato 0:92d12d355ba9 174 uint16_t _local_ports[ESP32::SOCKET_COUNT];
dkato 0:92d12d355ba9 175 };
dkato 0:92d12d355ba9 176
dkato 0:92d12d355ba9 177 #endif