2025-12-17 15:55:25 +08:00

926 lines
27 KiB
C

/* -----------------------------------------------------------------------------
* Copyright (c) 2019 Arm Limited (or its affiliates). All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the License); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*
* $Date: 12. November 2019
* $Revision: V1.0
*
* Project: ESP8266 WiFi Driver
* -------------------------------------------------------------------------- */
#ifndef ESP8266_H__
#define ESP8266_H__
#include "BufList.h"
#include "WiFi_ESP8266_Config.h"
/* AT command set version and variant used */
#ifndef AT_VERSION
#define AT_VERSION 0x01060200
#endif
#ifndef AT_VARIANT
#define AT_VARIANT AT_VARIANT_ESP
#endif
/* AT command set version definition */
/* Version as major.minor.patch.build: 0xMMmmppbb */
#define AT_VERSION_2_0_0_0 0x02000000
#define AT_VERSION_1_9_0_0 0x01090000
#define AT_VERSION_1_8_0_0 0x01080000
#define AT_VERSION_1_7_0_0 0x01070000
#define AT_VERSION_1_6_0_0 0x01060000
#define AT_VERSION_1_5_0_0 0x01050000
#define AT_VERSION_1_4_0_0 0x01040000
#define AT_VERSION_1_3_0_0 0x01030000
#define AT_VERSION_1_2_0_0 0x01020000
#define AT_VERSION_1_1_0_0 0x01010000
#define AT_VERSION_1_0_0_0 0x01000000
/* AT command set variants */
#define AT_VARIANT_ESP 0 /* ESP8266 */
#define AT_VARIANT_ESP32 1 /* ESP32 */
#define AT_VARIANT_WIZ 2 /* WizFi360 */
/* Callback events codes */
#define AT_NOTIFY_EXECUTE 0 /* Serial data available, execute parser */
#define AT_NOTIFY_CONNECTED 1 /* Local station connected to an AP */
#define AT_NOTIFY_GOT_IP 2 /* Local station got IP address */
#define AT_NOTIFY_DISCONNECTED 3 /* Local station disconnected from an AP */
#define AT_NOTIFY_CONNECTION_OPEN 4 /* Network connection is established */
#define AT_NOTIFY_CONNECTION_CLOSED 5 /* Network connection is closed */
#define AT_NOTIFY_STATION_CONNECTED 6 /* Station connects to the local AP */
#define AT_NOTIFY_STATION_DISCONNECTED 7 /* Station disconnects from the local AP */
#define AT_NOTIFY_CONNECTION_RX_INIT 8 /* Connection will start receiving data */
#define AT_NOTIFY_CONNECTION_RX_DATA 9 /* Connection data is ready to read */
#define AT_NOTIFY_REQUEST_TO_SEND 10 /* Request to load data to transmit */
#define AT_NOTIFY_RESPONSE_GENERIC 11 /* Received generic command response */
#define AT_NOTIFY_TX_DONE 12 /* Serial transmit completed */
#define AT_NOTIFY_OUT_OF_MEMORY 13 /* Serial parser is out of memory */
#define AT_NOTIFY_ERR_CODE 14 /* Received "ERR_CODE" response */
#define AT_NOTIFY_READY 15 /* The AT firmware is ready */
/**
AT parser notify callback function.
\param[in] event Callback event code (AT_NOTIFY codes)
\param[in] arg Event argument
*/
extern void AT_Notify (uint32_t event, void *arg);
/* Generic responses */
#define AT_RESP_OK 0 /* "OK" */
#define AT_RESP_ERROR 1 /* "ERROR" */
#define AT_RESP_FAIL 2 /* "FAIL" */
#define AT_RESP_SEND_OK 3 /* "SEND OK" */
#define AT_RESP_SEND_FAIL 4 /* "SEND FAIL" */
#define AT_RESP_BUSY_P 5 /* "busy p..." */
#define AT_RESP_BUSY_S 6 /* "busy s..." */
#define AT_RESP_ALREADY_CONNECTED 7 /* "ALREADY CONNECTED" */
#define AT_RESP_WIFI_CONNECTED 8 /* "WIFI CONNECTED" */
#define AT_RESP_WIFI_GOT_IP 9 /* "WIFI GOT IP" */
#define AT_RESP_WIFI_DISCONNECT 10 /* "WIFI DISCONNECT" */
#define AT_RESP_ECHO 11 /* (echo) */
#define AT_RESP_READY 12 /* "ready" */
#define AT_RESP_ERR_CODE 13 /* "ERR CODE:0x..." */
#define AT_RESP_UNKNOWN 0xFF /* (unknown) */
/* AT command mode */
#define AT_CMODE_QUERY 0 /* Inquiry command: AT+<x>? */
#define AT_CMODE_SET 1 /* Set command: AT+<x>=<...> */
#define AT_CMODE_EXEC 2 /* Execute command: AT+<x> */
#define AT_CMODE_TEST 3 /* Test command: AT+<x>=? */
/* AT_DATA_CWLAP ecn encoding */
#define AT_DATA_ECN_OPEN 0
#define AT_DATA_ECN_WEP 1
#define AT_DATA_ECN_WPA_PSK 2
#define AT_DATA_ECN_WPA2_PSK 3
#define AT_DATA_ECN_WPA_WPA2_PSK 4
#define AT_DATA_ECN_WPA2_E 5
/* List AP */
typedef struct {
uint8_t ecn; /* Encryption */
char ssid[32+1]; /* SSID string */
int8_t rssi; /* Signal strength */
uint8_t mac[6]; /* MAC address */
uint8_t ch; /* Channel */
uint16_t freq_offs; /* Frequency offset of AP [kHz] */
} AT_DATA_CWLAP;
/* Configure AP */
typedef struct {
char *ssid; /* SSID of AP */
char *pwd; /* Password string, length [8:64] bytes, ASCII */
uint8_t ch; /* Channel ID */
uint8_t ecn; /* Encryption */
uint8_t max_conn; /* Max number of stations, range [1,8] */
uint8_t ssid_hide; /* 0: SSID is broadcasted (default), 1: SSID is not broadcasted */
} AT_DATA_CWSAP;
/* Connect AP */
typedef struct {
char ssid[32+1]; /* SSID string */
uint8_t bssid[6]; /* BSSID: AP MAC address */
uint8_t ch; /* Channel */
uint8_t rssi; /* Signal strength */
} AT_DATA_CWJAP;
/* Link Connection */
typedef struct {
uint8_t link_id; /* Connection ID */
char type[4]; /* Type, "TCP", "UDP" */
uint8_t c_s; /* ESP runs as 0:client, 1:server */
uint8_t remote_ip[4]; /* Remote IP address */
uint16_t remote_port; /* Remote port number */
uint16_t local_port; /* Local port number */
} AT_DATA_LINK_CONN;
/* Device control block */
typedef struct {
BUF_LIST mem; /* Parser memory buffer */
BUF_LIST resp; /* Response data buffer */
uint8_t state; /* Parser state */
uint8_t cmd_sent; /* Last command sent */
uint8_t gen_resp; /* Generic response */
uint8_t msg_code; /* Message code */
uint8_t ctrl_code; /* Control code */
uint8_t resp_code; /* Response command code */
uint8_t resp_len; /* Response length */
uint8_t rsvd[2]; /* Reserved */
uint32_t ipd_rx; /* Number of bytes to receive (+IPD) */
} AT_PARSER_HANDLE;
/* AT parser state */
#define AT_STATE_ANALYZE 0
#define AT_STATE_WAIT 1
#define AT_STATE_FLUSH 2
#define AT_STATE_RESP_DATA 3
#define AT_STATE_RESP_GMR 4
#define AT_STATE_RESP_GEN 5
#define AT_STATE_RECV_DATA 6
#define AT_STATE_SEND_DATA 7
#define AT_STATE_RESP_CTRL 8
#define AT_STATE_RESP_ECHO 9
/* AT parser functions */
extern int32_t AT_Parser_Initialize (void);
extern int32_t AT_Parser_Uninitialize (void);
extern int32_t AT_Parser_SetBaudrate (uint32_t baudrate);
extern void AT_Parser_Execute (void);
extern void AT_Parser_Reset (void);
/* Command/Response functions */
/**
Test AT startup
Generic response is expected.
\return
*/
extern int32_t AT_Cmd_TestAT (void);
/**
Restarts the module
Generic response is expected.
\return
*/
extern int32_t AT_Cmd_Reset (void);
/**
Check version information
Generic response is expected.
\return
*/
extern int32_t AT_Cmd_GetVersion (void);
/**
Get response to GetVersion command
\param[out] buf
\param[in] len
\return
*/
extern int32_t AT_Resp_GetVersion (uint8_t *buf, uint32_t len);
/**
Enable or disable command echo.
ESP8266 can echo received commands.
Generic response is expected.
\param[in] enable Echo enable(1) or disable(0)
\return
*/
extern int32_t AT_Cmd_Echo (uint32_t enable);
/**
Set/Query the current UART configuration
Supported baudrates:
- ESP8266: in range of [110, 115200*40]
- WizFi360: [600:921600, 1000000, 1500000, 2000000]
\note OK response is sent first (using old UART settings) and then UART config is switched.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] baudrate
\param[in] databits
\param[in] stop_par_flowc stopbits[5:4], parity[3:2], flow control[1:0]
\return
*/
extern int32_t AT_Cmd_ConfigUART (uint32_t at_cmode, uint32_t baudrate, uint32_t databits, uint32_t stop_par_flowc);
/**
Get response to ConfigUART command
\param[out] baudrate
\param[out] databits
\param[out] stop_par_flowc stopbits[5:4], parity[3:2], flow control[1:0]
\return
*/
extern int32_t AT_Resp_ConfigUART (uint32_t *baudrate, uint32_t *databits, uint32_t *stop_par_flowc);
/**
Configure the sleep modes.
Command: SLEEP
\note Command can be used only in Station mode. Modem-sleep is the default mode.
\param[in] sleep_mode sleep mode (0: disabled, 1: Light-sleep, 2: Modem-sleep)
\return 0: ok, -1: error
*/
extern int32_t AT_Cmd_Sleep (uint32_t at_cmode, uint32_t sleep_mode);
/**
Get response to Sleep command.
\param[out] sleep_mode Pointer to variable where the sleep mode is stored
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_Sleep (uint32_t *sleep_mode);
/**
Set maximum value of RF TX power [dBm] (set only command).
Command: RFPOWER
\note AT query command is not available, only AT set.
\param[in] tx_power power value: range [0:82], units 0.25dBm
*/
extern int32_t AT_Cmd_TxPower (uint32_t tx_power);
/**
Set current system messages.
Command: SYSMSG_CUR
Bit 0: configure the message of quitting passthrough transmission
Bit 1: configure the message of establishing a network connection
\note Only AT set command is available.
\param[in] n message configuration bit mask [0:1]
*/
extern int32_t AT_Cmd_SysMessages (uint32_t n);
/**
Set/Query the current Wi-Fi mode
Command: CWMODE_CUR
\note
When setting mode to value 0, generic response "ERROR" is returned.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mode Mode, 1: station, 2: soft AP, 3: soft AP + station
\return 0: OK, -1: error (invalid mode, etc)
*/
extern int32_t AT_Cmd_CurrentMode (uint32_t at_cmode, uint32_t mode);
/**
Get response to CurrentMode command
\param[in] mode Mode, 1: station, 2: soft AP, 3: soft AP + station
\return
*/
extern int32_t AT_Resp_CurrentMode (uint32_t *mode);
/**
Set/Query connected access point or access point to connect to.
Command: CWJAP_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] ssid
\param[in] pwd
\param[in] bssid
\return
*/
extern int32_t AT_Cmd_ConnectAP (uint32_t at_cmode, const char *ssid, const char *pwd, const char *bssid);
/**
Response to ConnectAP command.
\param[out] ap query result of AP to which the station is already connected
\return - 1: connection timeout
- 2: wrong password
- 3: cannot find the target AP
- 4: connection failed
*/
extern int32_t AT_Resp_ConnectAP (AT_DATA_CWJAP *ap);
/**
Disconnect from current access point (execute only command).
*/
extern int32_t AT_Cmd_DisconnectAP (void);
/**
Configure local access point (SoftAP must be active)
Command: CWSAP_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] cfg AP configuration structure
\return
*/
extern int32_t AT_Cmd_ConfigureAP (uint32_t at_cmode, AT_DATA_CWSAP *cfg);
/**
Get response to ConfigureAP command
\param[in] cfg AP configuration structure
\return
*/
extern int32_t AT_Resp_ConfigureAP (AT_DATA_CWSAP *cfg);
/**
Retrieve the list of all available access points
Command: CWLAP
*/
extern int32_t AT_Cmd_ListAP (void);
/**
Get response to ListAP command
\param[out] ap Pointer to CWLAP structure
\param[in]
\return execution status
- negative: error
- 0: access point list is empty
- 1: access point list contains more data
*/
extern int32_t AT_Resp_ListAP (AT_DATA_CWLAP *ap);
/**
Set/Query the station MAC address
Command: CIPSTAMAC_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mac Pointer to 6 byte array containing MAC address
\return
*/
extern int32_t AT_Cmd_StationMAC (uint32_t at_cmode, const uint8_t mac[]);
/**
Get response to StationMAC command
\param[out] mac Pointer to 6 byte array where MAC address will be stored
\return execution status
*/
extern int32_t AT_Resp_StationMAC (uint8_t mac[]);
/**
Set/Query the Access Point MAC address
Command: CIPAPMAC_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mac Pointer to 6 byte array containing MAC address
\return
*/
extern int32_t AT_Cmd_AccessPointMAC (uint32_t at_cmode, uint8_t mac[]);
/**
Get response to AccessPointMAC command
\param[out] mac Pointer to 6 byte array where MAC address will be stored
\return execution status
*/
extern int32_t AT_Resp_AccessPointMAC (uint8_t mac[]);
/**
Set/Query current IP address of the local station
Command: CIPSTA_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] ip IP address
\param[in] gw Gateway address
\param[in] mask Netmask
\return
*/
extern int32_t AT_Cmd_StationIP (uint32_t at_cmode, uint8_t ip[], uint8_t gw[], uint8_t mask[]);
/**
Get response to StationIP command
\param[out] addr Pointer to 4 byte array where the address is stored
\return execution status
- negative: error
- 0: address list is empty
- 1: address list contains more data
*/
extern int32_t AT_Resp_StationIP (uint8_t addr[]);
/**
Set/Query current IP address of the local access point
Command: CIPAP_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] ip IP address
\param[in] gw Gateway address
\param[in] mask Netmask
\return
*/
extern int32_t AT_Cmd_AccessPointIP (uint32_t at_cmode, uint8_t ip[], uint8_t gw[], uint8_t mask[]);
/**
Get response to AccessPointIP command
\param[out] addr Pointer to 4 byte array where the address is stored
\return execution status
- negative: error
- 0: address list is empty
- 1: address list contains more data
*/
extern int32_t AT_Resp_AccessPointIP (uint8_t addr[]);
/**
Set user defined DNS servers
Command: CIPDNS_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] enable Enable (1) or disable (0) user defined DNS servers
\param[in] dns0 Primary DNS server
\param[in] dns1 Secondary DNS server
*/
extern int32_t AT_Cmd_DNS (uint32_t at_cmode, uint32_t enable, uint8_t dns0[], uint8_t dns1[]);
#if (AT_VARIANT == AT_VARIANT_ESP32) && (AT_VERSION >= AT_VERSION_2_0_0_0)
/**
Get response to DNS command
\param[out] enable Pointer to variable where enable flag will be stored
\param[out] dns0 Pointer to 4 byte array where DNS 0 address will be stored
\param[out] dns1 Pointer to 4 byte array where DNS 1 address will be stored
\return execution status
- negative: error
- 0: address list is empty
- 1: address list contains more data
*/
extern int32_t AT_Resp_DNS (uint32_t *enable, uint8_t dns0[], uint8_t dns1[]);
#else
/**
Get response to DNS command
\param[out] addr Pointer to 4 byte array where the address is stored
\return execution status
- negative: error
- 0: address list is empty
- 1: address list contains more data
*/
extern int32_t AT_Resp_DNS (uint8_t addr[]);
#endif
#if AT_VARIANT != AT_VARIANT_ESP32
/**
Set/Query DHCP state
Command: CWDHCP_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mode 0: set soft-ap, 1: set station, 2: set both (soft-ap and station)
\param[in] enable 0: disable DHCP, 1: enable DHCP
*/
extern int32_t AT_Cmd_DHCP (uint32_t at_cmode, uint32_t mode, uint32_t enable);
#else
/**
Set/Query DHCP state
Command: CWDHCP
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] operate 0: disable DHCP, 1: enable DHCP
\param[in] mode Bit0: set station, Bit1: set soft-ap
*/
extern int32_t AT_Cmd_DHCP (uint32_t at_cmode, uint32_t operate, uint32_t mode);
#endif
/**
Get response to DHCP command
\param[out] mode Pointer to variable the DHCP mode is stored
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_DHCP (uint32_t *mode);
/**
Set/Query DHCP IP address lease time and range for local access point
Command: CWDHCPS_CUR
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] en_tlease bit[16] 0: disable setting, 1: enable setting the IP range
bits[15:0] lease time in minutes, range [1, 2880]
\param[in] ip_start first IP in range that can be obtained from DHCP server
\param[in] ip_end last IP in range that can be obtained from DHCP server
*/
extern int32_t AT_Cmd_RangeDHCP (uint32_t at_cmode, uint32_t en_tlease, uint8_t ip_start[], uint8_t ip_end[]);
/**
Get response to RangeDHCP command
\param[out] t_lease lease time in minutes, range[1, 2880]
\param[out] ip_start first IP in range that can be obtained from DHCP server
\param[out] ip_end last IP in range that can be obtained from DHCP server
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_RangeDHCP (uint32_t *t_lease, uint8_t ip_start[], uint8_t ip_end[]);
/**
Set/Query Auto-Connect to the AP
Command: CWAUTOCONN
Generic response is expected.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] enable 0:disable, 1:enable auto-connect on power-up
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_AutoConnectAP (uint32_t at_cmode, uint32_t enable);
/**
Get response to AutoConnectAP command
\param[out] enable Pointer to variable the enable status is stored
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_AutoConnectAP (uint32_t *enable);
/**
Retrieve the list of IP (stations) connected to access point (execute only command)
Command: CWLIF
*/
extern int32_t AT_Cmd_ListIP (void);
/**
Get response to ListIP command
\param[out] ip Pointer to 4 byte array where IP address will be stored
\param[out] mac Pointer to 6 byte array where MAC address will be stored
\return execution status
- negative: error
- 0: list is empty
- 1: list contains more data
*/
extern int32_t AT_Resp_ListIP (uint8_t ip[], uint8_t mac[]);
/**
Set send data command.
Command: CIPSEND
Response: Generic response is expected
\param[in] at_cmode command mode (inquiry, set, exec)
\param[in] link_id connection id
\param[in] length number of bytes to send
\param[in] remote_ip remote IP (UDP transmission)
\param[in] remote_port remote port (UDP transmission)
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_SendData (uint32_t at_cmode, uint32_t link_id, uint32_t length, const uint8_t remote_ip[], uint16_t remote_port);
/**
Set/Query connection type (single, multiple connections)
Command: CIPMUX
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mode 0:single connection, 1:multiple connections
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_ConnectionMux (uint32_t at_cmode, uint32_t mode);
/**
Get response to ConnectionMux command
\param[out] mode 0:single connection, 1:multiple connections
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_ConnectionMux (uint32_t *mode);
/**
Create or delete TCP server.
Command: CIPSERVER
Generic response is expected.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] mode 0:delete server, 1:create server
\param[in] port port number
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_TcpServer (uint32_t at_cmode, uint32_t mode, uint16_t port);
/**
Set the maximum connection allowed by server.
Command: CIPSERVERMAXCONN
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] num maximum number of clients allowed to connect
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_TcpServerMaxConn (uint32_t at_cmode, uint32_t num);
/**
Get response to TcpServerMaxConn command
\param[in] num maximum number of clients allowed to connect
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_TcpServerMaxConn (uint32_t *num);
/**
Enable or disable remote IP and port with +IPD.
\param[in] mode 0:do not show remote info, 1: show remote info
*/
extern int32_t AT_Cmd_RemoteInfo (uint32_t mode);
/**
Retrieve incomming data.
Response: +IPD,<link ID>,<len>[,<remote IP>, <remote port>]:<data>
This response does not have CRLF terminator, <len> is the number of bytes in <data>.
\param[out] link_id connection ID
\param[out] len data length
\param[out] remote_ip remote IP (enabled by command AT+CIPDINFO=1)
\param[out] remote_port remote port (enabled by command AT+CIPDINFO=1)
\return 0: ok, len of data shall be read from buffer
negative: buffer empty or packet incomplete
*/
extern int32_t AT_Resp_IPD (uint32_t *link_id, uint32_t *len, uint8_t *remote_ip, uint16_t *remote_port);
/**
Get the connection status.
Command: CIPSTATUS
\param[in] at_cmode Command mode (exec only)
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_GetStatus (uint32_t at_cmode);
/**
Get response to GetStatus command
\param[out] conn connection info
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
int32_t AT_Resp_GetStatus (AT_DATA_LINK_CONN *conn);
/**
Resolve IP address from host name.
Command: CIPDOMAIN
\note Domain name string is limited to 64 characters (ESP32, ESP8266 and WizFi360).
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] domain domain name string (www.xxx.com)
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_DnsFunction (uint32_t at_cmode, const char *domain);
/**
Get response to DnsFunction command
\param[out] ip IP address
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_DnsFunction (uint8_t ip[]);
/**
Establish TCP connection.
Command: CIPSTART
Generic response is expected.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] link_id ID of the connection
\param[in] r_ip remote ip number
\param[in] r_port remote port number
\param[in] keep_alive TCP keep alive, 0:disable or [1:7200] in seconds to enable keep alive
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_ConnOpenTCP (uint32_t at_cmode, uint32_t link_id, const uint8_t r_ip[], uint16_t r_port, uint16_t keep_alive, uint32_t mode);
/**
Establish UDP transmission.
Command: CIPSTART
Generic response is expected.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] link_id ID of the connection
\param[in] r_ip remote ip number
\param[in] r_port remote port number
\param[in] l_port local port
\param[in] mode UDP mode (0:dst peer entity will not change, 1:will change once, 2:allowed to change)
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_ConnOpenUDP (uint32_t at_cmode, uint32_t link_id, const uint8_t r_ip[], uint16_t r_port, uint16_t l_port, uint32_t mode);
/**
Close the TCP/UDP/SSL connection.
Command: CIPCLOSE
If ID of the connection is 5, all connections will be closed.
Generic response is expected.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] link_id ID of the connection to be closed
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_ConnectionClose (uint32_t at_cmode, uint32_t link_id);
/**
Get ping response time.
Command: PING
Domain can be specified either by IP or by domain name string - only one should be
specified.
\param[in] at_cmode Command mode (inquiry, set, exec)
\param[in] ip IP address (xxx.xxx.xxx.xxx)
\param[in] domain domain name string (www.xxx.com)
\return execution status:
0: OK, -1 on error
*/
extern int32_t AT_Cmd_Ping (uint32_t at_cmode, const uint8_t ip[], const char *domain);
/**
Get response to Ping command.
Argument time indicates ping timeout when MSB is set ((time & 0x80000000) != 0).
\param[out] time ping response time in ms
\return execution status
- negative: error
- 0: OK, response retrieved, no more data
*/
extern int32_t AT_Resp_Ping (uint32_t *time);
/**
Generic response.
\return response code, see AT_RESP codes
*/
extern int32_t AT_Resp_Generic (void);
/**
Get +LINK_CONN response parameters (see +SYSMSG_CUR).
+LINK_CONN:<status_type>,<link_id>,"UDP/TCP/SSL",<c/s>,<remote_ip>,
<remote_port>,<local_port>
*/
extern int32_t AT_Resp_LinkConn (uint32_t *status, AT_DATA_LINK_CONN *conn);
/**
Get connection number from the <conn_id>,CONNECT and <conn_id>,CLOSED response.
\param[out] conn_id connection ID
\return execution status:
-1: no response (buffer empty)
0: connection number retrieved
*/
extern int32_t AT_Resp_CtrlConn (uint32_t *conn_id);
/**
Get +STA_CONNECTED and +STA_DISCONNECTED response (mac).
+STA_CONNECTED:<sta_mac>
+STA_DISCONNECTED"<sta_mac>
*/
extern int32_t AT_Resp_StaMac (uint8_t mac[]);
/**
Get ERR_CODE:0x... response.
\param[out] err_code Pointer to 32-bit variable where error code will be stored.
\return execution status:
-1: no response (buffer empty)
0: error code retrieved
*/
extern int32_t AT_Resp_ErrCode (uint32_t *err_code);
/**
Get number of bytes that can be sent.
*/
extern uint32_t AT_Send_GetFree (void);
/**
Send data (reply to data transmit request).
*/
extern uint32_t AT_Send_Data (const uint8_t *buf, uint32_t len);
#endif /* ESP8266_H__ */