mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-07-15 08:32:42 +08:00
feat(esp8266): Move esp8266 header to esp8266 of components
This commit is contained in:
150
components/esp8266/include/espressif/airkiss.h
Normal file
150
components/esp8266/include/espressif/airkiss.h
Normal file
@ -0,0 +1,150 @@
|
||||
/*
|
||||
* airkiss.h
|
||||
*
|
||||
* Created on: 2015-1-26
|
||||
* Author: peterfan
|
||||
*/
|
||||
|
||||
#ifndef AIRKISS_H_
|
||||
#define AIRKISS_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef void* (*airkiss_memset_fn) (void* ptr, int value, unsigned int num);
|
||||
typedef void* (*airkiss_memcpy_fn) (void* dst, const void* src, unsigned int num);
|
||||
typedef int (*airkiss_memcmp_fn) (const void* ptr1, const void* ptr2, unsigned int num);
|
||||
typedef int (*airkiss_printf_fn) (const char* format, ...);
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
airkiss_memset_fn memset;
|
||||
airkiss_memcpy_fn memcpy;
|
||||
airkiss_memcmp_fn memcmp;
|
||||
airkiss_printf_fn printf;
|
||||
|
||||
} airkiss_config_t;
|
||||
|
||||
/** \defgroup WiFi_APIs WiFi Related APIs
|
||||
* @brief WiFi APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup WiFi_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup AirKiss_APIs AirKiss APIs
|
||||
* @brief AirKiss APIs
|
||||
*
|
||||
* API airkiss_lan_recv and airkiss_lan_pack are provided for the function that AirKiss can detect
|
||||
* the ESP8266 devices in LAN, more details about AirKiss please refer to WeChat : http://iot.weixin.qq.com.
|
||||
*
|
||||
* Workflow : Create a UDP transmission. When UDP data is received, call API airkiss_lan_recv and
|
||||
* input the UDP data, if the airkiss_lan_recv returns AIRKISS_LAN_SSDP_REQ, airkiss_lan_pack
|
||||
* can be called to make a response packet.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup AirKiss_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Get the version information of AirKiss lib.
|
||||
*
|
||||
* @attention The lenth of version is unknown
|
||||
*
|
||||
* @param null.
|
||||
*
|
||||
* @return the version information of AirKiss lib
|
||||
*/
|
||||
|
||||
const char* airkiss_version(void);
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
/** the length of the data buffer is lack*/
|
||||
AIRKISS_LAN_ERR_OVERFLOW = -5,
|
||||
|
||||
/** Do not support the type of instruction */
|
||||
AIRKISS_LAN_ERR_CMD = -4,
|
||||
|
||||
/** Error reading data package */
|
||||
AIRKISS_LAN_ERR_PAKE = -3,
|
||||
|
||||
/** Error function passing parameters */
|
||||
AIRKISS_LAN_ERR_PARA = -2,
|
||||
|
||||
/** Packet data error */
|
||||
AIRKISS_LAN_ERR_PKG = -1,
|
||||
|
||||
/** Message format is correct */
|
||||
AIRKISS_LAN_CONTINUE = 0,
|
||||
|
||||
/** Find equipment request packet is received */
|
||||
AIRKISS_LAN_SSDP_REQ = 1,
|
||||
|
||||
/** Packet packaging complete */
|
||||
AIRKISS_LAN_PAKE_READY = 2
|
||||
|
||||
|
||||
} airkiss_lan_ret_t;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AIRKISS_LAN_SSDP_REQ_CMD = 0x1,
|
||||
AIRKISS_LAN_SSDP_RESP_CMD = 0x1001,
|
||||
AIRKISS_LAN_SSDP_NOTIFY_CMD = 0x1002
|
||||
} airkiss_lan_cmdid_t;
|
||||
|
||||
/**
|
||||
* @brief Parse the UDP packet sent by AirKiss.
|
||||
*
|
||||
* @param const void* body : the start of the UDP message body data pointer.
|
||||
* @param unsigned short length : the effective length of data.
|
||||
* @param const airkiss_config_t* config : input struct airkiss_config_t
|
||||
*
|
||||
* @return >=0 : succeed (reference airkiss_lan_ret_t)
|
||||
* @return <0 : error code (reference airkiss_lan_ret_t)
|
||||
*/
|
||||
|
||||
int airkiss_lan_recv(const void* body, unsigned short length, const airkiss_config_t* config);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Packaging the UDP packet.
|
||||
*
|
||||
* @param airkiss_lan_cmdid_t ak_lan_cmdid : type of the packet.
|
||||
* @param void* appid : Vendor's Wechat public number id, got from WeChat.
|
||||
* @param void* deviceid : device model id, got from WeChat.
|
||||
* @param void* _datain : user data waiting for packet assembly.
|
||||
* @param unsigned short inlength : the lenth of user data.
|
||||
* @param void* _dataout : data buffer addr, to store the packet got by _datain packet assembly.
|
||||
* @param unsigned short* outlength : the size of data buffer.
|
||||
* @param const airkiss_config_t* config : input struct airkiss_config_t
|
||||
*
|
||||
* @return >=0 : succeed (reference airkiss_lan_ret_t)
|
||||
* @return <0 : error code (reference airkiss_lan_ret_t)
|
||||
*/
|
||||
|
||||
int airkiss_lan_pack(airkiss_lan_cmdid_t ak_lan_cmdid, void* appid, void* deviceid, void* _datain, unsigned short inlength, void* _dataout, unsigned short* outlength, const airkiss_config_t* config);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* AIRKISS_H_ */
|
114
components/esp8266/include/espressif/c_types.h
Normal file
114
components/esp8266/include/espressif/c_types.h
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _C_TYPES_H_
|
||||
#define _C_TYPES_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef uint8_t u8_t;
|
||||
typedef int8_t s8_t;
|
||||
typedef uint16_t u16_t;
|
||||
typedef int16_t s16_t;
|
||||
typedef uint32_t u32_t;
|
||||
typedef int32_t s32_t;
|
||||
|
||||
typedef uint8_t uint8;
|
||||
typedef uint8_t u8;
|
||||
typedef int8_t sint8;
|
||||
typedef int8_t int8;
|
||||
typedef int8_t s8;
|
||||
typedef uint16_t uint16;
|
||||
typedef uint16_t u16;
|
||||
typedef int16_t sint16;
|
||||
typedef int16_t s16;
|
||||
typedef uint32_t uint32;
|
||||
typedef uint32_t u_int;
|
||||
typedef uint32_t u32;
|
||||
typedef int32_t sint32;
|
||||
typedef int32_t s32;
|
||||
typedef int32_t int32;
|
||||
typedef int64_t sint64;
|
||||
typedef uint64_t uint64;
|
||||
typedef uint64_t u64;
|
||||
typedef float real32;
|
||||
typedef double real64;
|
||||
|
||||
#define __le16 u16
|
||||
|
||||
#define LOCAL static
|
||||
|
||||
#ifndef NULL
|
||||
#define NULL (void *)0
|
||||
#endif /* NULL */
|
||||
|
||||
/* probably should not put STATUS here */
|
||||
typedef enum {
|
||||
OK = 0,
|
||||
FAIL,
|
||||
PENDING,
|
||||
BUSY,
|
||||
CANCEL,
|
||||
} STATUS;
|
||||
|
||||
#define BIT(nr) (1UL << (nr))
|
||||
|
||||
#define REG_WRITE(_r, _v) (*(volatile uint32 *)(_r)) = (_v)
|
||||
#define REG_READ(_r) (*(volatile uint32 *)(_r))
|
||||
|
||||
#define REG_SET_BIT(_r, _b) (*(volatile uint32 *)(_r) |= (_b))
|
||||
#define REG_CLR_BIT(_r, _b) (*(volatile uint32 *)(_r) &= ~(_b))
|
||||
|
||||
#define __packed __attribute__((packed))
|
||||
#define STORE_ATTR __attribute__((aligned(4)))
|
||||
|
||||
#define SHMEM_ATTR
|
||||
|
||||
#ifdef ICACHE_FLASH
|
||||
#define ICACHE_FLASH_ATTR __attribute__((section(".irom0.text")))
|
||||
#else
|
||||
#define ICACHE_FLASH_ATTR
|
||||
#endif
|
||||
|
||||
#define DMEM_ATTR __attribute__((section(".bss")))
|
||||
#define IRAM_ATTR __attribute__((section(".text")))
|
||||
#define ICACHE_RODATA_ATTR __attribute__((section(".irom.text")))
|
||||
|
||||
#ifndef __cplusplus
|
||||
#define BOOL bool
|
||||
#define TRUE true
|
||||
#define FALSE false
|
||||
#endif /* !__cplusplus */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _C_TYPES_H_ */
|
126
components/esp8266/include/espressif/esp8266/eagle_soc.h
Normal file
126
components/esp8266/include/espressif/esp8266/eagle_soc.h
Normal file
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _EAGLE_SOC_H_
|
||||
#define _EAGLE_SOC_H_
|
||||
|
||||
//Register Bits{{
|
||||
#define BIT31 0x80000000
|
||||
#define BIT30 0x40000000
|
||||
#define BIT29 0x20000000
|
||||
#define BIT28 0x10000000
|
||||
#define BIT27 0x08000000
|
||||
#define BIT26 0x04000000
|
||||
#define BIT25 0x02000000
|
||||
#define BIT24 0x01000000
|
||||
#define BIT23 0x00800000
|
||||
#define BIT22 0x00400000
|
||||
#define BIT21 0x00200000
|
||||
#define BIT20 0x00100000
|
||||
#define BIT19 0x00080000
|
||||
#define BIT18 0x00040000
|
||||
#define BIT17 0x00020000
|
||||
#define BIT16 0x00010000
|
||||
#define BIT15 0x00008000
|
||||
#define BIT14 0x00004000
|
||||
#define BIT13 0x00002000
|
||||
#define BIT12 0x00001000
|
||||
#define BIT11 0x00000800
|
||||
#define BIT10 0x00000400
|
||||
#define BIT9 0x00000200
|
||||
#define BIT8 0x00000100
|
||||
#define BIT7 0x00000080
|
||||
#define BIT6 0x00000040
|
||||
#define BIT5 0x00000020
|
||||
#define BIT4 0x00000010
|
||||
#define BIT3 0x00000008
|
||||
#define BIT2 0x00000004
|
||||
#define BIT1 0x00000002
|
||||
#define BIT0 0x00000001
|
||||
//}}
|
||||
|
||||
//Registers Operation {{
|
||||
#define ETS_UNCACHED_ADDR(addr) (addr)
|
||||
#define ETS_CACHED_ADDR(addr) (addr)
|
||||
|
||||
#define READ_PERI_REG(addr) (*((volatile uint32 *)ETS_UNCACHED_ADDR(addr)))
|
||||
#define WRITE_PERI_REG(addr, val) (*((volatile uint32 *)ETS_UNCACHED_ADDR(addr))) = (uint32)(val)
|
||||
#define CLEAR_PERI_REG_MASK(reg, mask) WRITE_PERI_REG((reg), (READ_PERI_REG(reg) & (~(mask))))
|
||||
#define SET_PERI_REG_MASK(reg, mask) WRITE_PERI_REG((reg), (READ_PERI_REG(reg) | (mask)))
|
||||
#define GET_PERI_REG_BITS(reg, hipos, lowpos) ((READ_PERI_REG(reg) >> (lowpos)) & ((1 << ((hipos) - (lowpos) + 1)) - 1))
|
||||
#define SET_PERI_REG_BITS(reg, bit_map, value, shift) (WRITE_PERI_REG((reg), (READ_PERI_REG(reg) & (~((bit_map) << (shift)))) | ((value) << (shift)) ))
|
||||
//}}
|
||||
|
||||
//Periheral Clock {{
|
||||
#define CPU_CLK_FREQ 80 * 1000000 // unit: Hz
|
||||
#define APB_CLK_FREQ CPU_CLK_FREQ
|
||||
#define UART_CLK_FREQ APB_CLK_FREQ
|
||||
#define TIMER_CLK_FREQ (APB_CLK_FREQ >> 8) // divided by 256
|
||||
//}}
|
||||
|
||||
//Peripheral device base address define{{
|
||||
#define PERIPHS_DPORT_BASEADDR 0x3ff00000
|
||||
#define PERIPHS_RTC_BASEADDR 0x60000700
|
||||
//}}
|
||||
|
||||
//DPORT{{
|
||||
#define HOST_INF_SEL (PERIPHS_DPORT_BASEADDR + 0x28)
|
||||
#define DPORT_LINK_DEVICE_SEL 0x000000FF
|
||||
#define DPORT_LINK_DEVICE_SEL_S 8
|
||||
#define DPORT_PERI_IO_SWAP 0x000000FF
|
||||
#define DPORT_PERI_IO_SWAP_S 0
|
||||
#define PERI_IO_CSPI_OVERLAP (BIT(7)) // two spi masters on cspi
|
||||
#define PERI_IO_HSPI_OVERLAP (BIT(6)) // two spi masters on hspi
|
||||
#define PERI_IO_HSPI_PRIO (BIT(5)) // hspi is with the higher prior
|
||||
#define PERI_IO_UART1_PIN_SWAP (BIT(3)) // swap uart1 pins (u1rxd <-> u1cts), (u1txd <-> u1rts)
|
||||
#define PERI_IO_UART0_PIN_SWAP (BIT(2)) // swap uart0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts)
|
||||
#define PERI_IO_SPI_PORT_SWAP (BIT(1)) // swap two spi
|
||||
#define PERI_IO_UART_PORT_SWAP (BIT(0)) // swap two uart
|
||||
//}}
|
||||
|
||||
//Interrupt remap control registers define{{
|
||||
#define EDGE_INT_ENABLE_REG (PERIPHS_DPORT_BASEADDR + 0x04)
|
||||
#define TM1_EDGE_INT_ENABLE() SET_PERI_REG_MASK(EDGE_INT_ENABLE_REG, BIT1)
|
||||
#define TM1_EDGE_INT_DISABLE() CLEAR_PERI_REG_MASK(EDGE_INT_ENABLE_REG, BIT1)
|
||||
//}}
|
||||
|
||||
//RTC reg {{
|
||||
#define REG_RTC_BASE PERIPHS_RTC_BASEADDR
|
||||
|
||||
#define RTC_SLP_VAL (REG_RTC_BASE + 0x004) // the target value of RTC_COUNTER for wakeup from light-sleep/deep-sleep
|
||||
#define RTC_SLP_CNT_VAL (REG_RTC_BASE + 0x01C) // the current value of RTC_COUNTER
|
||||
|
||||
#define RTC_SCRATCH0 (REG_RTC_BASE + 0x030) // the register for software to save some values for watchdog reset
|
||||
#define RTC_SCRATCH1 (REG_RTC_BASE + 0x034) // the register for software to save some values for watchdog reset
|
||||
#define RTC_SCRATCH2 (REG_RTC_BASE + 0x038) // the register for software to save some values for watchdog reset
|
||||
#define RTC_SCRATCH3 (REG_RTC_BASE + 0x03C) // the register for software to save some values for watchdog reset
|
||||
|
||||
#define RTC_GPIO_OUT (REG_RTC_BASE + 0x068) // used by gpio16
|
||||
#define RTC_GPIO_ENABLE (REG_RTC_BASE + 0x074)
|
||||
#define RTC_GPIO_IN_DATA (REG_RTC_BASE + 0x08C)
|
||||
#define RTC_GPIO_CONF (REG_RTC_BASE + 0x090)
|
||||
#define PAD_XPD_DCDC_CONF (REG_RTC_BASE + 0x0A0)
|
||||
//}}
|
||||
|
||||
#endif //_EAGLE_SOC_H_
|
37
components/esp8266/include/espressif/esp8266/esp8266.h
Normal file
37
components/esp8266/include/espressif/esp8266/esp8266.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP8266_H__
|
||||
#define __ESP8266_H__
|
||||
|
||||
#include "ets_sys.h"
|
||||
#include "eagle_soc.h"
|
||||
#include "gpio_register.h"
|
||||
#include "pin_mux_register.h"
|
||||
#include "spi_register.h"
|
||||
#include "timer_register.h"
|
||||
#include "uart_register.h"
|
||||
|
||||
#endif
|
||||
|
63
components/esp8266/include/espressif/esp8266/ets_sys.h
Normal file
63
components/esp8266/include/espressif/esp8266/ets_sys.h
Normal file
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ETS_SYS_H__
|
||||
#define __ETS_SYS_H__
|
||||
|
||||
/* interrupt related */
|
||||
#define ETS_SPI_INUM 2
|
||||
#define ETS_GPIO_INUM 4
|
||||
#define ETS_UART_INUM 5
|
||||
#define ETS_MAX_INUM 6
|
||||
#define ETS_SOFT_INUM 7
|
||||
#define ETS_WDT_INUM 8
|
||||
#define ETS_FRC_TIMER1_INUM 9
|
||||
|
||||
extern char NMIIrqIsOn;
|
||||
extern uint32 WDEV_INTEREST_EVENT;
|
||||
|
||||
#define INT_ENA_WDEV 0x3ff20c18
|
||||
#define WDEV_TSF0_REACH_INT (BIT(27))
|
||||
|
||||
#define ETS_INTR_LOCK() do { \
|
||||
if (NMIIrqIsOn == 0) { \
|
||||
vPortEnterCritical(); \
|
||||
char m = 10; \
|
||||
do { \
|
||||
REG_WRITE(INT_ENA_WDEV, 0); \
|
||||
m = 10; \
|
||||
for (; m > 0; m--) {} \
|
||||
REG_WRITE(INT_ENA_WDEV, WDEV_TSF0_REACH_INT); \
|
||||
} while(0); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define ETS_INTR_UNLOCK() do { \
|
||||
if (NMIIrqIsOn == 0) { \
|
||||
REG_WRITE(INT_ENA_WDEV, WDEV_INTEREST_EVENT); \
|
||||
vPortExitCritical(); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#endif /* _ETS_SYS_H */
|
338
components/esp8266/include/espressif/esp8266/gpio_register.h
Normal file
338
components/esp8266/include/espressif/esp8266/gpio_register.h
Normal file
@ -0,0 +1,338 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _GPIO_REGISTER_H_
|
||||
#define _GPIO_REGISTER_H_
|
||||
|
||||
#define PERIPHS_GPIO_BASEADDR 0x60000300
|
||||
|
||||
#define GPIO_OUT_ADDRESS 0x00
|
||||
#define GPIO_BT_SEL 0x0000ffff
|
||||
#define GPIO_BT_SEL_S 16
|
||||
#define GPIO_OUT_DATA 0x0000ffff
|
||||
#define GPIO_OUT_DATA_S 0
|
||||
|
||||
#define GPIO_OUT_W1TS_ADDRESS 0x04
|
||||
#define GPIO_OUT_DATA_W1TS 0x0000ffff
|
||||
#define GPIO_OUT_DATA_W1TS_S 0
|
||||
|
||||
#define GPIO_OUT_W1TC_ADDRESS 0x08
|
||||
#define GPIO_OUT_DATA_W1TC 0x0000ffff
|
||||
#define GPIO_OUT_DATA_W1TC_S 0
|
||||
#define GPIO_OUT_DATA_MASK 0x0000ffff
|
||||
|
||||
#define GPIO_ENABLE_ADDRESS 0x0c
|
||||
#define GPIO_SDIO_SEL 0x0000003f
|
||||
#define GPIO_SDIO_SEL_S 16
|
||||
#define GPIO_ENABLE_DATA 0x0000ffff
|
||||
#define GPIO_ENABLE_DATA_S 0
|
||||
|
||||
#define GPIO_ENABLE_W1TS_ADDRESS 0x10
|
||||
#define GPIO_ENABLE_DATA_W1TS 0x0000ffff
|
||||
#define GPIO_ENABLE_DATA_W1TS_s 0
|
||||
|
||||
#define GPIO_ENABLE_W1TC_ADDRESS 0x14
|
||||
#define GPIO_ENABLE_DATA_W1TC 0x0000ffff
|
||||
#define GPIO_ENABLE_DATA_W1TC_S 0
|
||||
#define GPIO_ENABLE_DATA_DATA_MASK 0x0000ffff
|
||||
|
||||
#define GPIO_IN_ADDRESS 0x18
|
||||
#define GPIO_STRAPPING 0x0000ffff
|
||||
#define GPIO_STRAPPING_S 16
|
||||
#define GPIO_IN_DATA 0x0000ffff
|
||||
#define GPIO_IN_DATA_S 0
|
||||
|
||||
#define GPIO_STATUS_ADDRESS 0x1c
|
||||
#define GPIO_STATUS_INTERRUPT 0x0000ffff
|
||||
#define GPIO_STATUS_INTERRUPT_S 0
|
||||
|
||||
#define GPIO_STATUS_W1TS_ADDRESS 0x20
|
||||
#define GPIO_STATUS_INTERRUPT_W1TS 0x0000ffff
|
||||
#define GPIO_STATUS_INTERRUPT_W1TS_S 0
|
||||
|
||||
#define GPIO_STATUS_W1TC_ADDRESS 0x24
|
||||
#define GPIO_STATUS_INTERRUPT_W1TC 0x0000ffff
|
||||
#define GPIO_STATUS_INTERRUPT_W1TC_S 0
|
||||
#define GPIO_STATUS_INTERRUPT_DATA_MASK 0x0000ffff
|
||||
|
||||
//Region1: used for gpio config for GPIO_PIN0_ADDRESS~GPIO_PIN15_ADDRESS
|
||||
#define GPIO_ID_PIN0 0
|
||||
#define GPIO_ID_PIN(n) (GPIO_ID_PIN0+(n))
|
||||
#define GPIO_LAST_REGISTER_ID GPIO_ID_PIN(15)
|
||||
#define GPIO_ID_NONE 0xffffffff
|
||||
#define GPIO_PIN_COUNT 16
|
||||
|
||||
#define GPIO_PIN_CONFIG_MSB 12
|
||||
#define GPIO_PIN_CONFIG_LSB 11
|
||||
#define GPIO_PIN_CONFIG_MASK (0x00000003<<GPIO_PIN_CONFIG_LSB)
|
||||
#define GPIO_PIN_CONFIG_GET(x) (((x) & GPIO_PIN_CONFIG_MASK) >> GPIO_PIN_CONFIG_LSB)
|
||||
#define GPIO_PIN_CONFIG_SET(x) (((x) << GPIO_PIN_CONFIG_LSB) & GPIO_PIN_CONFIG_MASK)
|
||||
|
||||
#define GPIO_WAKEUP_ENABLE 1
|
||||
#define GPIO_WAKEUP_DISABLE (~GPIO_WAKEUP_ENABLE)
|
||||
#define GPIO_PIN_WAKEUP_ENABLE_MSB 10
|
||||
#define GPIO_PIN_WAKEUP_ENABLE_LSB 10
|
||||
#define GPIO_PIN_WAKEUP_ENABLE_MASK (0x00000001<<GPIO_PIN_WAKEUP_ENABLE_LSB)
|
||||
#define GPIO_PIN_WAKEUP_ENABLE_GET(x) (((x) & GPIO_PIN_CONFIG_MASK) >> GPIO_PIN_CONFIG_LSB)
|
||||
#define GPIO_PIN_WAKEUP_ENABLE_SET(x) (((x) << GPIO_PIN_WAKEUP_ENABLE_LSB) & GPIO_PIN_WAKEUP_ENABLE_MASK)
|
||||
|
||||
#define GPIO_PIN_INT_TYPE_MSB 9
|
||||
#define GPIO_PIN_INT_TYPE_LSB 7
|
||||
#define GPIO_PIN_INT_TYPE_MASK (0x00000007<<GPIO_PIN_INT_TYPE_LSB)
|
||||
#define GPIO_PIN_INT_TYPE_GET(x) (((x) & GPIO_PIN_INT_TYPE_MASK) >> GPIO_PIN_INT_TYPE_LSB)
|
||||
#define GPIO_PIN_INT_TYPE_SET(x) (((x) << GPIO_PIN_INT_TYPE_LSB) & GPIO_PIN_INT_TYPE_MASK)
|
||||
|
||||
#define GPIO_PAD_DRIVER_ENABLE 1
|
||||
#define GPIO_PAD_DRIVER_DISABLE (~GPIO_PAD_DRIVER_ENABLE)
|
||||
#define GPIO_PIN_DRIVER_MSB 2
|
||||
#define GPIO_PIN_DRIVER_LSB 2
|
||||
#define GPIO_PIN_DRIVER_MASK (0x00000001<<GPIO_PIN_DRIVER_LSB)
|
||||
#define GPIO_PIN_DRIVER_GET(x) (((x) & GPIO_PIN_INT_TYPE_MASK) >> GPIO_PIN_INT_TYPE_LSB)
|
||||
#define GPIO_PIN_PAD_DRIVER_SET(x) (((x) << GPIO_PIN_DRIVER_LSB) & GPIO_PIN_DRIVER_MASK)
|
||||
|
||||
#define GPIO_PIN_SOURCE_MSB 0
|
||||
#define GPIO_PIN_SOURCE_LSB 0
|
||||
#define GPIO_PIN_SOURCE_MASK (0x00000001<<GPIO_PIN_SOURCE_LSB)
|
||||
#define GPIO_PIN_SOURCE_GET(x) (((x) & GPIO_PIN_INT_TYPE_MASK) >> GPIO_PIN_INT_TYPE_LSB)
|
||||
#define GPIO_PIN_SOURCE_SET(x) (((x) << GPIO_PIN_SOURCE_LSB) & GPIO_PIN_SOURCE_MASK)
|
||||
//end of region1
|
||||
|
||||
#define GPIO_PIN0_ADDRESS 0x28
|
||||
#define GPIO_PIN0_CONFIG 0x00000003
|
||||
#define GPIO_PIN0_CONFIG_S 11
|
||||
#define GPIO_PIN0_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN0_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN0_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN0_INT_TYPE_S 7
|
||||
#define GPIO_PIN0_DRIVER BIT2
|
||||
#define GPIO_PIN0_DRIVER_S 2
|
||||
#define GPIO_PIN0_SOURCE BIT0
|
||||
#define GPIO_PIN0_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN1_ADDRESS 0x2c
|
||||
#define GPIO_PIN1_CONFIG 0x00000003
|
||||
#define GPIO_PIN1_CONFIG_S 11
|
||||
#define GPIO_PIN1_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN1_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN1_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN1_INT_TYPE_S 7
|
||||
#define GPIO_PIN1_DRIVER BIT2
|
||||
#define GPIO_PIN1_DRIVER_S 2
|
||||
#define GPIO_PIN1_SOURCE BIT0
|
||||
#define GPIO_PIN1_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN2_ADDRESS 0x30
|
||||
#define GPIO_PIN2_CONFIG 0x00000003
|
||||
#define GPIO_PIN2_CONFIG_S 11
|
||||
#define GPIO_PIN2_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN2_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN2_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN2_INT_TYPE_S 7
|
||||
#define GPIO_PIN2_DRIVER BIT2
|
||||
#define GPIO_PIN2_DRIVER_S 2
|
||||
#define GPIO_PIN2_SOURCE BIT0
|
||||
#define GPIO_PIN2_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN3_ADDRESS 0x34
|
||||
#define GPIO_PIN3_CONFIG 0x00000003
|
||||
#define GPIO_PIN3_CONFIG_S 11
|
||||
#define GPIO_PIN3_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN3_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN3_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN3_INT_TYPE_S 7
|
||||
#define GPIO_PIN3_DRIVER BIT2
|
||||
#define GPIO_PIN3_DRIVER_S 2
|
||||
#define GPIO_PIN3_SOURCE BIT0
|
||||
#define GPIO_PIN3_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN4_ADDRESS 0x38
|
||||
#define GPIO_PIN4_CONFIG 0x00000003
|
||||
#define GPIO_PIN4_CONFIG_S 11
|
||||
#define GPIO_PIN4_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN4_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN4_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN4_INT_TYPE_S 7
|
||||
#define GPIO_PIN4_DRIVER BIT2
|
||||
#define GPIO_PIN4_DRIVER_S 2
|
||||
#define GPIO_PIN4_SOURCE BIT0
|
||||
#define GPIO_PIN4_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN5_ADDRESS 0x3c
|
||||
#define GPIO_PIN5_CONFIG 0x00000003
|
||||
#define GPIO_PIN5_CONFIG_S 11
|
||||
#define GPIO_PIN5_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN5_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN5_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN5_INT_TYPE_S 7
|
||||
#define GPIO_PIN5_DRIVER BIT2
|
||||
#define GPIO_PIN5_DRIVER_S 2
|
||||
#define GPIO_PIN5_SOURCE BIT0
|
||||
#define GPIO_PIN5_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN6_ADDRESS 0x40
|
||||
#define GPIO_PIN6_CONFIG 0x00000003
|
||||
#define GPIO_PIN6_CONFIG_S 11
|
||||
#define GPIO_PIN6_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN6_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN6_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN6_INT_TYPE_S 7
|
||||
#define GPIO_PIN6_DRIVER BIT2
|
||||
#define GPIO_PIN6_DRIVER_S 2
|
||||
#define GPIO_PIN6_SOURCE BIT0
|
||||
#define GPIO_PIN6_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN7_ADDRESS 0x44
|
||||
#define GPIO_PIN7_CONFIG 0x00000003
|
||||
#define GPIO_PIN7_CONFIG_S 11
|
||||
#define GPIO_PIN7_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN7_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN7_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN7_INT_TYPE_S 7
|
||||
#define GPIO_PIN7_DRIVER BIT2
|
||||
#define GPIO_PIN7_DRIVER_S 2
|
||||
#define GPIO_PIN7_SOURCE BIT0
|
||||
#define GPIO_PIN7_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN8_ADDRESS 0x48
|
||||
#define GPIO_PIN8_CONFIG 0x00000003
|
||||
#define GPIO_PIN8_CONFIG_S 11
|
||||
#define GPIO_PIN8_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN8_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN8_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN8_INT_TYPE_S 7
|
||||
#define GPIO_PIN8_DRIVER BIT2
|
||||
#define GPIO_PIN8_DRIVER_S 2
|
||||
#define GPIO_PIN8_SOURCE BIT0
|
||||
#define GPIO_PIN8_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN9_ADDRESS 0x4c
|
||||
#define GPIO_PIN9_CONFIG 0x00000003
|
||||
#define GPIO_PIN9_CONFIG_S 11
|
||||
#define GPIO_PIN9_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN9_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN9_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN9_INT_TYPE_S 7
|
||||
#define GPIO_PIN9_DRIVER BIT2
|
||||
#define GPIO_PIN9_DRIVER_S 2
|
||||
#define GPIO_PIN9_SOURCE BIT0
|
||||
#define GPIO_PIN9_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN10_ADDRESS 0x50
|
||||
#define GPIO_PIN10_CONFIG 0x00000003
|
||||
#define GPIO_PIN10_CONFIG_S 11
|
||||
#define GPIO_PIN10_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN10_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN10_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN10_INT_TYPE_S 7
|
||||
#define GPIO_PIN10_DRIVER BIT2
|
||||
#define GPIO_PIN10_DRIVER_S 2
|
||||
#define GPIO_PIN10_SOURCE BIT0
|
||||
#define GPIO_PIN10_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN11_ADDRESS 0x54
|
||||
#define GPIO_PIN11_CONFIG 0x00000003
|
||||
#define GPIO_PIN11_CONFIG_S 11
|
||||
#define GPIO_PIN11_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN11_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN11_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN11_INT_TYPE_S 7
|
||||
#define GPIO_PIN11_DRIVER BIT2
|
||||
#define GPIO_PIN11_DRIVER_S 2
|
||||
#define GPIO_PIN11_SOURCE BIT0
|
||||
#define GPIO_PIN11_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN12_ADDRESS 0x58
|
||||
#define GPIO_PIN12_CONFIG 0x00000003
|
||||
#define GPIO_PIN12_CONFIG_S 11
|
||||
#define GPIO_PIN12_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN12_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN12_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN12_INT_TYPE_S 7
|
||||
#define GPIO_PIN12_DRIVER BIT2
|
||||
#define GPIO_PIN12_DRIVER_S 2
|
||||
#define GPIO_PIN12_SOURCE BIT0
|
||||
#define GPIO_PIN12_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN13_ADDRESS 0x5c
|
||||
#define GPIO_PIN13_CONFIG 0x00000003
|
||||
#define GPIO_PIN13_CONFIG_S 11
|
||||
#define GPIO_PIN13_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN13_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN13_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN13_INT_TYPE_S 7
|
||||
#define GPIO_PIN13_DRIVER BIT2
|
||||
#define GPIO_PIN13_DRIVER_S 2
|
||||
#define GPIO_PIN13_SOURCE BIT0
|
||||
#define GPIO_PIN13_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN14_ADDRESS 0x60
|
||||
#define GPIO_PIN14_CONFIG 0x00000003
|
||||
#define GPIO_PIN14_CONFIG_S 11
|
||||
#define GPIO_PIN14_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN14_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN14_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN14_INT_TYPE_S 7
|
||||
#define GPIO_PIN14_DRIVER BIT2
|
||||
#define GPIO_PIN14_DRIVER_S 2
|
||||
#define GPIO_PIN14_SOURCE BIT0
|
||||
#define GPIO_PIN14_SOURCE_S 0
|
||||
|
||||
#define GPIO_PIN15_ADDRESS 0x64
|
||||
#define GPIO_PIN15_CONFIG 0x00000003
|
||||
#define GPIO_PIN15_CONFIG_S 11
|
||||
#define GPIO_PIN15_WAKEUP_ENABLE BIT10
|
||||
#define GPIO_PIN15_WAKEUP_ENABLE_S 10
|
||||
#define GPIO_PIN15_INT_TYPE 0x00000007
|
||||
#define GPIO_PIN15_INT_TYPE_S 7
|
||||
#define GPIO_PIN15_DRIVER BIT2
|
||||
#define GPIO_PIN15_DRIVER_S 2
|
||||
#define GPIO_PIN15_SOURCE BIT0
|
||||
#define GPIO_PIN15_SOURCE_S 0
|
||||
|
||||
#define GPIO_SIGMA_DELTA_ADDRESS 0x68
|
||||
#define SIGMA_DELTA_ENABLE BIT16
|
||||
#define SIGMA_DELTA_ENABLE_S 16
|
||||
#define SIGMA_DELTA_PRESCALAR 0x000000ff
|
||||
#define SIGMA_DELTA_PRESCALAR_S 8
|
||||
#define SIGMA_DELTA_TARGET 0x000000ff
|
||||
#define SIGMA_DELTA_TARGET_S 0
|
||||
|
||||
#define GPIO_RTC_CALIB_SYNC_ADDRESS 0x6c
|
||||
#define RTC_CALIB_START BIT31
|
||||
#define RTC_CALIB_START_S 31
|
||||
#define RTC_PERIOD_NUM 0x000003ff
|
||||
#define RTC_PERIOD_NUM_S 0
|
||||
|
||||
#define GPIO_RTC_CALIB_VALUE_ADDRESS 0x70
|
||||
#define RTC_CALIB_RDY BIT31
|
||||
#define RTC_CALIB_RDY_S 31
|
||||
#define RTC_CALIB_RDY_REAL BIT30
|
||||
#define RTC_CALIB_RDY_REAL_S 30
|
||||
#define RTC_CALIB_VALUE 0x000fffff
|
||||
#define RTC_CALIB_VALUE_S 0
|
||||
|
||||
#define GPIO_REG_READ(reg) READ_PERI_REG(PERIPHS_GPIO_BASEADDR + reg)
|
||||
#define GPIO_REG_WRITE(reg, val) WRITE_PERI_REG(PERIPHS_GPIO_BASEADDR + reg, val)
|
||||
|
||||
#endif
|
152
components/esp8266/include/espressif/esp8266/pin_mux_register.h
Normal file
152
components/esp8266/include/espressif/esp8266/pin_mux_register.h
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PIN_MUX_H_
|
||||
#define _PIN_MUX_H_
|
||||
#include "eagle_soc.h"
|
||||
#define PERIPHS_IO_MUX 0x60000800
|
||||
|
||||
#define PERIPHS_IO_MUX_FUNC 0x13
|
||||
#define PERIPHS_IO_MUX_FUNC_S 4
|
||||
#define PERIPHS_IO_MUX_PULLUP BIT7
|
||||
#define PERIPHS_IO_MUX_PULLDWN BIT6
|
||||
#define PERIPHS_IO_MUX_SLEEP_PULLUP BIT3
|
||||
#define PERIPHS_IO_MUX_SLEEP_PULLDWN BIT2
|
||||
#define PERIPHS_IO_MUX_SLEEP_OE BIT1
|
||||
#define PERIPHS_IO_MUX_OE BIT0
|
||||
|
||||
#define PERIPHS_IO_MUX_CONF_U (PERIPHS_IO_MUX + 0x00)
|
||||
#define SPI0_CLK_EQU_SYS_CLK BIT8
|
||||
#define SPI1_CLK_EQU_SYS_CLK BIT9
|
||||
|
||||
#define PERIPHS_IO_MUX_MTDI_U (PERIPHS_IO_MUX + 0x04)
|
||||
#define FUNC_MTDI 0
|
||||
#define FUNC_I2SI_DATA 1
|
||||
#define FUNC_HSPIQ_MISO 2
|
||||
#define FUNC_GPIO12 3
|
||||
#define FUNC_UART0_DTR 4
|
||||
|
||||
#define PERIPHS_IO_MUX_MTCK_U (PERIPHS_IO_MUX + 0x08)
|
||||
#define FUNC_MTCK 0
|
||||
#define FUNC_I2SI_BCK 1
|
||||
#define FUNC_HSPID_MOSI 2
|
||||
#define FUNC_GPIO13 3
|
||||
#define FUNC_UART0_CTS 4
|
||||
|
||||
#define PERIPHS_IO_MUX_MTMS_U (PERIPHS_IO_MUX + 0x0C)
|
||||
#define FUNC_MTMS 0
|
||||
#define FUNC_I2SI_WS 1
|
||||
#define FUNC_HSPI_CLK 2
|
||||
#define FUNC_GPIO14 3
|
||||
#define FUNC_UART0_DSR 4
|
||||
|
||||
#define PERIPHS_IO_MUX_MTDO_U (PERIPHS_IO_MUX + 0x10)
|
||||
#define FUNC_MTDO 0
|
||||
#define FUNC_I2SO_BCK 1
|
||||
#define FUNC_HSPI_CS0 2
|
||||
#define FUNC_GPIO15 3
|
||||
#define FUNC_U0RTS 4
|
||||
#define FUNC_UART0_RTS 4
|
||||
|
||||
#define PERIPHS_IO_MUX_U0RXD_U (PERIPHS_IO_MUX + 0x14)
|
||||
#define FUNC_U0RXD 0
|
||||
#define FUNC_I2SO_DATA 1
|
||||
#define FUNC_GPIO3 3
|
||||
#define FUNC_CLK_XTAL_BK 4
|
||||
|
||||
#define PERIPHS_IO_MUX_U0TXD_U (PERIPHS_IO_MUX + 0x18)
|
||||
#define FUNC_U0TXD 0
|
||||
#define FUNC_SPICS1 1
|
||||
#define FUNC_GPIO1 3
|
||||
#define FUNC_CLK_RTC_BK 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_CLK_U (PERIPHS_IO_MUX + 0x1c)
|
||||
#define FUNC_SDCLK 0
|
||||
#define FUNC_SPICLK 1
|
||||
#define FUNC_GPIO6 3
|
||||
#define UART1_CTS 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_DATA0_U (PERIPHS_IO_MUX + 0x20)
|
||||
#define FUNC_SDDATA0 0
|
||||
#define FUNC_SPIQ_MISO 1
|
||||
#define FUNC_GPIO7 3
|
||||
#define FUNC_U1TXD 4
|
||||
#define FUNC_UART1_TXD 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_DATA1_U (PERIPHS_IO_MUX + 0x24)
|
||||
#define FUNC_SDDATA1 0
|
||||
#define FUNC_SPID_MOSI 1
|
||||
#define FUNC_GPIO8 3
|
||||
#define FUNC_U1RXD 4
|
||||
#define FUNC_UART1_RXD 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_DATA2_U (PERIPHS_IO_MUX + 0x28)
|
||||
#define FUNC_SDDATA2 0
|
||||
#define FUNC_SPIHD 1
|
||||
#define FUNC_GPIO9 3
|
||||
#define UFNC_HSPIHD 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_DATA3_U (PERIPHS_IO_MUX + 0x2c)
|
||||
#define FUNC_SDDATA3 0
|
||||
#define FUNC_SPIWP 1
|
||||
#define FUNC_GPIO10 3
|
||||
#define FUNC_HSPIWP 4
|
||||
|
||||
#define PERIPHS_IO_MUX_SD_CMD_U (PERIPHS_IO_MUX + 0x30)
|
||||
#define FUNC_SDCMD 0
|
||||
#define FUNC_SPICS0 1
|
||||
#define FUNC_GPIO11 3
|
||||
#define U1RTS 4
|
||||
#define UART1_RTS 4
|
||||
|
||||
#define PERIPHS_IO_MUX_GPIO0_U (PERIPHS_IO_MUX + 0x34)
|
||||
#define FUNC_GPIO0 0
|
||||
#define FUNC_SPICS2 1
|
||||
#define FUNC_CLK_OUT 4
|
||||
|
||||
#define PERIPHS_IO_MUX_GPIO2_U (PERIPHS_IO_MUX + 0x38)
|
||||
#define FUNC_GPIO2 0
|
||||
#define FUNC_I2SO_WS 1
|
||||
#define FUNC_U1TXD_BK 2
|
||||
#define FUNC_UART1_TXD_BK 2
|
||||
#define FUNC_U0TXD_BK 4
|
||||
#define FUNC_UART0_TXD_BK 4
|
||||
|
||||
#define PERIPHS_IO_MUX_GPIO4_U (PERIPHS_IO_MUX + 0x3C)
|
||||
#define FUNC_GPIO4 0
|
||||
#define FUNC_CLK_XTAL 1
|
||||
|
||||
#define PERIPHS_IO_MUX_GPIO5_U (PERIPHS_IO_MUX + 0x40)
|
||||
#define FUNC_GPIO5 0
|
||||
#define FUNC_CLK_RTC 1
|
||||
|
||||
#define PIN_PULLUP_DIS(PIN_NAME) CLEAR_PERI_REG_MASK(PIN_NAME, PERIPHS_IO_MUX_PULLUP)
|
||||
#define PIN_PULLUP_EN(PIN_NAME) SET_PERI_REG_MASK(PIN_NAME, PERIPHS_IO_MUX_PULLUP)
|
||||
|
||||
#define PIN_FUNC_SELECT(PIN_NAME, FUNC) do { \
|
||||
CLEAR_PERI_REG_MASK(PIN_NAME, (PERIPHS_IO_MUX_FUNC << PERIPHS_IO_MUX_FUNC_S)); \
|
||||
SET_PERI_REG_MASK(PIN_NAME, (((FUNC & BIT2) << 2) | (FUNC & 0x3)) << PERIPHS_IO_MUX_FUNC_S); \
|
||||
} while (0)
|
||||
|
||||
#endif //_PIN_MUX_H_
|
193
components/esp8266/include/espressif/esp8266/spi_register.h
Normal file
193
components/esp8266/include/espressif/esp8266/spi_register.h
Normal file
@ -0,0 +1,193 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SPI_REGISTER_H_INCLUDED
|
||||
#define SPI_REGISTER_H_INCLUDED
|
||||
|
||||
#define REG_SPI_BASE(i) (0x60000200 - i*0x100)
|
||||
|
||||
#define SPI_CMD(i) (REG_SPI_BASE(i) + 0x0)
|
||||
#define SPI_USR (BIT(18))
|
||||
|
||||
#define SPI_ADDR(i) (REG_SPI_BASE(i) + 0x4)
|
||||
|
||||
#define SPI_CTRL(i) (REG_SPI_BASE(i) + 0x8)
|
||||
#define SPI_WR_BIT_ORDER (BIT(26))
|
||||
#define SPI_RD_BIT_ORDER (BIT(25))
|
||||
#define SPI_QIO_MODE (BIT(24))
|
||||
#define SPI_DIO_MODE (BIT(23))
|
||||
#define SPI_QOUT_MODE (BIT(20))
|
||||
#define SPI_DOUT_MODE (BIT(14))
|
||||
#define SPI_FASTRD_MODE (BIT(13))
|
||||
|
||||
#define SPI_RD_STATUS(i) (REG_SPI_BASE(i) + 0x10)
|
||||
|
||||
#define SPI_CTRL2(i) (REG_SPI_BASE(i) + 0x14)
|
||||
#define SPI_CS_DELAY_NUM 0x0000000F
|
||||
#define SPI_CS_DELAY_NUM_S 28
|
||||
#define SPI_CS_DELAY_MODE 0x00000003
|
||||
#define SPI_CS_DELAY_MODE_S 26
|
||||
#define SPI_MOSI_DELAY_NUM 0x00000007
|
||||
#define SPI_MOSI_DELAY_NUM_S 23
|
||||
#define SPI_MOSI_DELAY_MODE 0x00000003
|
||||
#define SPI_MOSI_DELAY_MODE_S 21
|
||||
#define SPI_MISO_DELAY_NUM 0x00000007
|
||||
#define SPI_MISO_DELAY_NUM_S 18
|
||||
#define SPI_MISO_DELAY_MODE 0x00000003
|
||||
#define SPI_MISO_DELAY_MODE_S 16
|
||||
|
||||
#define SPI_CLOCK(i) (REG_SPI_BASE(i) + 0x18)
|
||||
#define SPI_CLK_EQU_SYSCLK (BIT(31))
|
||||
#define SPI_CLKDIV_PRE 0x00001FFF
|
||||
#define SPI_CLKDIV_PRE_S 18
|
||||
#define SPI_CLKCNT_N 0x0000003F
|
||||
#define SPI_CLKCNT_N_S 12
|
||||
#define SPI_CLKCNT_H 0x0000003F
|
||||
#define SPI_CLKCNT_H_S 6
|
||||
#define SPI_CLKCNT_L 0x0000003F
|
||||
#define SPI_CLKCNT_L_S 0
|
||||
|
||||
#define SPI_USER(i) (REG_SPI_BASE(i) + 0x1C)
|
||||
#define SPI_USR_COMMAND (BIT(31))
|
||||
#define SPI_USR_ADDR (BIT(30))
|
||||
#define SPI_USR_DUMMY (BIT(29))
|
||||
#define SPI_USR_MISO (BIT(28))
|
||||
#define SPI_USR_MOSI (BIT(27))
|
||||
#define SPI_USR_MOSI_HIGHPART (BIT(25))
|
||||
#define SPI_USR_MISO_HIGHPART (BIT(24))
|
||||
#define SPI_SIO (BIT(16))
|
||||
#define SPI_FWRITE_QIO (BIT(15))
|
||||
#define SPI_FWRITE_DIO (BIT(14))
|
||||
#define SPI_FWRITE_QUAD (BIT(13))
|
||||
#define SPI_FWRITE_DUAL (BIT(12))
|
||||
#define SPI_WR_BYTE_ORDER (BIT(11))
|
||||
#define SPI_RD_BYTE_ORDER (BIT(10))
|
||||
#define SPI_CK_OUT_EDGE (BIT(7))
|
||||
#define SPI_CK_I_EDGE (BIT(6))
|
||||
#define SPI_CS_SETUP (BIT(5))
|
||||
#define SPI_CS_HOLD (BIT(4))
|
||||
#define SPI_FLASH_MODE (BIT(2))
|
||||
|
||||
#define SPI_USER1(i) (REG_SPI_BASE(i) + 0x20)
|
||||
#define SPI_USR_ADDR_BITLEN 0x0000003F
|
||||
#define SPI_USR_ADDR_BITLEN_S 26
|
||||
#define SPI_USR_MOSI_BITLEN 0x000001FF
|
||||
#define SPI_USR_MOSI_BITLEN_S 17
|
||||
#define SPI_USR_MISO_BITLEN 0x000001FF
|
||||
#define SPI_USR_MISO_BITLEN_S 8
|
||||
#define SPI_USR_DUMMY_CYCLELEN 0x000000FF
|
||||
#define SPI_USR_DUMMY_CYCLELEN_S 0
|
||||
|
||||
#define SPI_USER2(i) (REG_SPI_BASE(i) + 0x24)
|
||||
#define SPI_USR_COMMAND_BITLEN 0x0000000F
|
||||
#define SPI_USR_COMMAND_BITLEN_S 28
|
||||
#define SPI_USR_COMMAND_VALUE 0x0000FFFF
|
||||
#define SPI_USR_COMMAND_VALUE_S 0
|
||||
|
||||
#define SPI_WR_STATUS(i) (REG_SPI_BASE(i) + 0x28)
|
||||
|
||||
#define SPI_PIN(i) (REG_SPI_BASE(i) + 0x2C)
|
||||
#define SPI_CS2_DIS (BIT(2))
|
||||
#define SPI_CS1_DIS (BIT(1))
|
||||
#define SPI_CS0_DIS (BIT(0))
|
||||
|
||||
#define SPI_SLAVE(i) (REG_SPI_BASE(i) + 0x30)
|
||||
#define SPI_SYNC_RESET (BIT(31))
|
||||
#define SPI_SLAVE_MODE (BIT(30))
|
||||
#define SPI_SLV_WR_RD_BUF_EN (BIT(29))
|
||||
#define SPI_SLV_WR_RD_STA_EN (BIT(28))
|
||||
#define SPI_SLV_CMD_DEFINE (BIT(27))
|
||||
#define SPI_TRANS_CNT 0x0000000F
|
||||
#define SPI_TRANS_CNT_S 23
|
||||
#define SPI_TRANS_DONE_EN (BIT(9))
|
||||
#define SPI_SLV_WR_STA_DONE_EN (BIT(8))
|
||||
#define SPI_SLV_RD_STA_DONE_EN (BIT(7))
|
||||
#define SPI_SLV_WR_BUF_DONE_EN (BIT(6))
|
||||
#define SPI_SLV_RD_BUF_DONE_EN (BIT(5))
|
||||
#define SLV_SPI_INT_EN 0x0000001f
|
||||
#define SLV_SPI_INT_EN_S 5
|
||||
#define SPI_TRANS_DONE (BIT(4))
|
||||
#define SPI_SLV_WR_STA_DONE (BIT(3))
|
||||
#define SPI_SLV_RD_STA_DONE (BIT(2))
|
||||
#define SPI_SLV_WR_BUF_DONE (BIT(1))
|
||||
#define SPI_SLV_RD_BUF_DONE (BIT(0))
|
||||
|
||||
#define SPI_SLAVE1(i) (REG_SPI_BASE(i) + 0x34)
|
||||
#define SPI_SLV_STATUS_BITLEN 0x0000001F
|
||||
#define SPI_SLV_STATUS_BITLEN_S 27
|
||||
#define SPI_SLV_BUF_BITLEN 0x000001FF
|
||||
#define SPI_SLV_BUF_BITLEN_S 16
|
||||
#define SPI_SLV_RD_ADDR_BITLEN 0x0000003F
|
||||
#define SPI_SLV_RD_ADDR_BITLEN_S 10
|
||||
#define SPI_SLV_WR_ADDR_BITLEN 0x0000003F
|
||||
#define SPI_SLV_WR_ADDR_BITLEN_S 4
|
||||
#define SPI_SLV_WRSTA_DUMMY_EN (BIT(3))
|
||||
#define SPI_SLV_RDSTA_DUMMY_EN (BIT(2))
|
||||
#define SPI_SLV_WRBUF_DUMMY_EN (BIT(1))
|
||||
#define SPI_SLV_RDBUF_DUMMY_EN (BIT(0))
|
||||
|
||||
#define SPI_SLAVE2(i) (REG_SPI_BASE(i) + 0x38)
|
||||
#define SPI_SLV_WRBUF_DUMMY_CYCLELEN 0x000000FF
|
||||
#define SPI_SLV_WRBUF_DUMMY_CYCLELEN_S 24
|
||||
#define SPI_SLV_RDBUF_DUMMY_CYCLELEN 0x000000FF
|
||||
#define SPI_SLV_RDBUF_DUMMY_CYCLELEN_S 16
|
||||
#define SPI_SLV_WRSTR_DUMMY_CYCLELEN 0x000000FF
|
||||
#define SPI_SLV_WRSTR_DUMMY_CYCLELEN_S 8
|
||||
#define SPI_SLV_RDSTR_DUMMY_CYCLELEN 0x000000FF
|
||||
#define SPI_SLV_RDSTR_DUMMY_CYCLELEN_S 0
|
||||
|
||||
#define SPI_SLAVE3(i) (REG_SPI_BASE(i) + 0x3C)
|
||||
#define SPI_SLV_WRSTA_CMD_VALUE 0x000000FF
|
||||
#define SPI_SLV_WRSTA_CMD_VALUE_S 24
|
||||
#define SPI_SLV_RDSTA_CMD_VALUE 0x000000FF
|
||||
#define SPI_SLV_RDSTA_CMD_VALUE_S 16
|
||||
#define SPI_SLV_WRBUF_CMD_VALUE 0x000000FF
|
||||
#define SPI_SLV_WRBUF_CMD_VALUE_S 8
|
||||
#define SPI_SLV_RDBUF_CMD_VALUE 0x000000FF
|
||||
#define SPI_SLV_RDBUF_CMD_VALUE_S 0
|
||||
|
||||
#define SPI_W0(i) (REG_SPI_BASE(i) + 0x40)
|
||||
#define SPI_W1(i) (REG_SPI_BASE(i) + 0x44)
|
||||
#define SPI_W2(i) (REG_SPI_BASE(i) + 0x48)
|
||||
#define SPI_W3(i) (REG_SPI_BASE(i) + 0x4C)
|
||||
#define SPI_W4(i) (REG_SPI_BASE(i) + 0x50)
|
||||
#define SPI_W5(i) (REG_SPI_BASE(i) + 0x54)
|
||||
#define SPI_W6(i) (REG_SPI_BASE(i) + 0x58)
|
||||
#define SPI_W7(i) (REG_SPI_BASE(i) + 0x5C)
|
||||
#define SPI_W8(i) (REG_SPI_BASE(i) + 0x60)
|
||||
#define SPI_W9(i) (REG_SPI_BASE(i) + 0x64)
|
||||
#define SPI_W10(i) (REG_SPI_BASE(i) + 0x68)
|
||||
#define SPI_W11(i) (REG_SPI_BASE(i) + 0x6C)
|
||||
#define SPI_W12(i) (REG_SPI_BASE(i) + 0x70)
|
||||
#define SPI_W13(i) (REG_SPI_BASE(i) + 0x74)
|
||||
#define SPI_W14(i) (REG_SPI_BASE(i) + 0x78)
|
||||
#define SPI_W15(i) (REG_SPI_BASE(i) + 0x7C)
|
||||
|
||||
#define SPI_EXT2(i) (REG_SPI_BASE(i) + 0xF8)
|
||||
|
||||
#define SPI_EXT3(i) (REG_SPI_BASE(i) + 0xFC)
|
||||
#define SPI_INT_HOLD_ENA 0x00000003
|
||||
#define SPI_INT_HOLD_ENA_S 0
|
||||
|
||||
#endif // SPI_REGISTER_H_INCLUDED
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _TIMER_REGISTER_H_
|
||||
#define _TIMER_REGISTER_H_
|
||||
|
||||
#define PERIPHS_TIMER_BASEDDR 0x60000600
|
||||
|
||||
#define FRC1_LOAD_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x0)
|
||||
#define TIMER_FRC1_LOAD_VALUE 0x007FFFFF
|
||||
#define TIMER_FRC1_LOAD_VALUE_S 0
|
||||
#define FRC1_LOAD_DATA_MSB 22
|
||||
#define FRC1_LOAD_DATA_LSB 0
|
||||
#define FRC1_LOAD_DATA_MASK 0x007fffff
|
||||
|
||||
#define FRC1_COUNT_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x4)
|
||||
#define TIMER_FRC1_COUNT 0x007FFFFF
|
||||
#define TIMER_FRC1_COUNT_S 0
|
||||
#define FRC1_COUNT_DATA_MSB 22
|
||||
#define FRC1_COUNT_DATA_LSB 0
|
||||
#define FRC1_COUNT_DATA_MASK 0x007fffff
|
||||
|
||||
#define FRC1_CTRL_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x8)
|
||||
#define TIMER_FRC1_INT (BIT(8))
|
||||
#define TIMER_FRC1_CTRL 0x000000FF
|
||||
#define TIMER_FRC1_CTRL_S 0
|
||||
#define FRC1_CTRL_DATA_MSB 7
|
||||
#define FRC1_CTRL_DATA_LSB 0
|
||||
#define FRC1_CTRL_DATA_MASK 0x000000ff
|
||||
|
||||
#define FRC1_INT_ADDRESS (PERIPHS_TIMER_BASEDDR + 0xC)
|
||||
#define TIMER_FRC1_INT_CLR_MASK (BIT(0))
|
||||
#define FRC1_INT_CLR_MSB 0
|
||||
#define FRC1_INT_CLR_LSB 0
|
||||
#define FRC1_INT_CLR_MASK 0x00000001
|
||||
|
||||
#define FRC2_LOAD_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x20)
|
||||
#define TIMER_FRC2_LOAD_VALUE 0xFFFFFFFF
|
||||
#define TIMER_FRC2_LOAD_VALUE_S 0
|
||||
#define FRC2_LOAD_DATA_MSB 31
|
||||
#define FRC2_LOAD_DATA_LSB 0
|
||||
#define FRC2_LOAD_DATA_MASK 0xffffffff
|
||||
|
||||
#define FRC2_COUNT_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x24)
|
||||
#define TIMER_FRC2_COUNT 0xFFFFFFFF
|
||||
#define TIMER_FRC2_COUNT_S 0
|
||||
#define FRC2_COUNT_DATA_MSB 31
|
||||
#define FRC2_COUNT_DATA_LSB 0
|
||||
#define FRC2_COUNT_DATA_MASK 0xffffffff
|
||||
|
||||
#define FRC2_CTRL_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x28)
|
||||
#define TIMER_FRC2_INT (BIT(8))
|
||||
#define TIMER_FRC2_CTRL 0x000000FF
|
||||
#define TIMER_FRC2_CTRL_S 0
|
||||
#define FRC2_CTRL_DATA_MSB 7
|
||||
#define FRC2_CTRL_DATA_LSB 0
|
||||
#define FRC2_CTRL_DATA_MASK 0x000000ff
|
||||
|
||||
#define FRC2_INT_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x2C)
|
||||
#define TIMER_FRC2_INT_CLR_MASK (BIT(0))
|
||||
#define FRC2_INT_CLR_MSB 0
|
||||
#define FRC2_INT_CLR_LSB 0
|
||||
#define FRC2_INT_CLR_MASK 0x00000001
|
||||
|
||||
#define FRC2_ALARM_ADDRESS (PERIPHS_TIMER_BASEDDR + 0x30)
|
||||
#define TIMER_FRC2_ALARM 0xFFFFFFFF
|
||||
#define TIMER_FRC2_ALARM_S 0
|
||||
#define FRC2_ALARM_DATA_MSB 31
|
||||
#define FRC2_ALARM_DATA_LSB 0
|
||||
#define FRC2_ALARM_DATA_MASK 0xffffffff
|
||||
|
||||
#endif
|
154
components/esp8266/include/espressif/esp8266/uart_register.h
Normal file
154
components/esp8266/include/espressif/esp8266/uart_register.h
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef UART_REGISTER_H_
|
||||
#define UART_REGISTER_H_
|
||||
|
||||
#define REG_UART_BASE(i) (0x60000000 + (i)*0xf00)
|
||||
//version value:32'h062000
|
||||
|
||||
#define UART_FIFO(i) (REG_UART_BASE(i) + 0x0)
|
||||
#define UART_RXFIFO_RD_BYTE 0x000000FF
|
||||
#define UART_RXFIFO_RD_BYTE_S 0
|
||||
|
||||
#define UART_INT_RAW(i) (REG_UART_BASE(i) + 0x4)
|
||||
#define UART_RXFIFO_TOUT_INT_RAW (BIT(8))
|
||||
#define UART_BRK_DET_INT_RAW (BIT(7))
|
||||
#define UART_CTS_CHG_INT_RAW (BIT(6))
|
||||
#define UART_DSR_CHG_INT_RAW (BIT(5))
|
||||
#define UART_RXFIFO_OVF_INT_RAW (BIT(4))
|
||||
#define UART_FRM_ERR_INT_RAW (BIT(3))
|
||||
#define UART_PARITY_ERR_INT_RAW (BIT(2))
|
||||
#define UART_TXFIFO_EMPTY_INT_RAW (BIT(1))
|
||||
#define UART_RXFIFO_FULL_INT_RAW (BIT(0))
|
||||
|
||||
#define UART_INT_ST(i) (REG_UART_BASE(i) + 0x8)
|
||||
#define UART_RXFIFO_TOUT_INT_ST (BIT(8))
|
||||
#define UART_BRK_DET_INT_ST (BIT(7))
|
||||
#define UART_CTS_CHG_INT_ST (BIT(6))
|
||||
#define UART_DSR_CHG_INT_ST (BIT(5))
|
||||
#define UART_RXFIFO_OVF_INT_ST (BIT(4))
|
||||
#define UART_FRM_ERR_INT_ST (BIT(3))
|
||||
#define UART_PARITY_ERR_INT_ST (BIT(2))
|
||||
#define UART_TXFIFO_EMPTY_INT_ST (BIT(1))
|
||||
#define UART_RXFIFO_FULL_INT_ST (BIT(0))
|
||||
|
||||
#define UART_INT_ENA(i) (REG_UART_BASE(i) + 0xC)
|
||||
#define UART_RXFIFO_TOUT_INT_ENA (BIT(8))
|
||||
#define UART_BRK_DET_INT_ENA (BIT(7))
|
||||
#define UART_CTS_CHG_INT_ENA (BIT(6))
|
||||
#define UART_DSR_CHG_INT_ENA (BIT(5))
|
||||
#define UART_RXFIFO_OVF_INT_ENA (BIT(4))
|
||||
#define UART_FRM_ERR_INT_ENA (BIT(3))
|
||||
#define UART_PARITY_ERR_INT_ENA (BIT(2))
|
||||
#define UART_TXFIFO_EMPTY_INT_ENA (BIT(1))
|
||||
#define UART_RXFIFO_FULL_INT_ENA (BIT(0))
|
||||
|
||||
#define UART_INT_CLR(i) (REG_UART_BASE(i) + 0x10)
|
||||
#define UART_RXFIFO_TOUT_INT_CLR (BIT(8))
|
||||
#define UART_BRK_DET_INT_CLR (BIT(7))
|
||||
#define UART_CTS_CHG_INT_CLR (BIT(6))
|
||||
#define UART_DSR_CHG_INT_CLR (BIT(5))
|
||||
#define UART_RXFIFO_OVF_INT_CLR (BIT(4))
|
||||
#define UART_FRM_ERR_INT_CLR (BIT(3))
|
||||
#define UART_PARITY_ERR_INT_CLR (BIT(2))
|
||||
#define UART_TXFIFO_EMPTY_INT_CLR (BIT(1))
|
||||
#define UART_RXFIFO_FULL_INT_CLR (BIT(0))
|
||||
|
||||
#define UART_CLKDIV(i) (REG_UART_BASE(i) + 0x14)
|
||||
#define UART_CLKDIV_CNT 0x000FFFFF
|
||||
#define UART_CLKDIV_S 0
|
||||
|
||||
#define UART_AUTOBAUD(i) (REG_UART_BASE(i) + 0x18)
|
||||
#define UART_GLITCH_FILT 0x000000FF
|
||||
#define UART_GLITCH_FILT_S 8
|
||||
#define UART_AUTOBAUD_EN (BIT(0))
|
||||
|
||||
#define UART_STATUS(i) (REG_UART_BASE(i) + 0x1C)
|
||||
#define UART_TXD (BIT(31))
|
||||
#define UART_RTSN (BIT(30))
|
||||
#define UART_DTRN (BIT(29))
|
||||
#define UART_TXFIFO_CNT 0x000000FF
|
||||
#define UART_TXFIFO_CNT_S 16
|
||||
#define UART_RXD (BIT(15))
|
||||
#define UART_CTSN (BIT(14))
|
||||
#define UART_DSRN (BIT(13))
|
||||
#define UART_RXFIFO_CNT 0x000000FF
|
||||
#define UART_RXFIFO_CNT_S 0
|
||||
|
||||
#define UART_CONF0(i) (REG_UART_BASE(i) + 0x20)
|
||||
#define UART_DTR_INV (BIT(24))
|
||||
#define UART_RTS_INV (BIT(23))
|
||||
#define UART_TXD_INV (BIT(22))
|
||||
#define UART_DSR_INV (BIT(21))
|
||||
#define UART_CTS_INV (BIT(20))
|
||||
#define UART_RXD_INV (BIT(19))
|
||||
#define UART_TXFIFO_RST (BIT(18))
|
||||
#define UART_RXFIFO_RST (BIT(17))
|
||||
#define UART_IRDA_EN (BIT(16))
|
||||
#define UART_TX_FLOW_EN (BIT(15))
|
||||
#define UART_LOOPBACK (BIT(14))
|
||||
#define UART_IRDA_RX_INV (BIT(13))
|
||||
#define UART_IRDA_TX_INV (BIT(12))
|
||||
#define UART_IRDA_WCTL (BIT(11))
|
||||
#define UART_IRDA_TX_EN (BIT(10))
|
||||
#define UART_IRDA_DPLX (BIT(9))
|
||||
#define UART_TXD_BRK (BIT(8))
|
||||
#define UART_SW_DTR (BIT(7))
|
||||
#define UART_SW_RTS (BIT(6))
|
||||
#define UART_STOP_BIT_NUM 0x00000003
|
||||
#define UART_STOP_BIT_NUM_S 4
|
||||
#define UART_BIT_NUM 0x00000003
|
||||
#define UART_BIT_NUM_S 2
|
||||
#define UART_PARITY_EN (BIT(1))
|
||||
#define UART_PARITY (BIT(0))
|
||||
|
||||
#define UART_CONF1(i) (REG_UART_BASE(i) + 0x24)
|
||||
#define UART_RX_TOUT_EN (BIT(31))
|
||||
#define UART_RX_TOUT_THRHD 0x0000007F
|
||||
#define UART_RX_TOUT_THRHD_S 24
|
||||
#define UART_RX_FLOW_EN (BIT(23))
|
||||
#define UART_RX_FLOW_THRHD 0x0000007F
|
||||
#define UART_RX_FLOW_THRHD_S 16
|
||||
#define UART_TXFIFO_EMPTY_THRHD 0x0000007F
|
||||
#define UART_TXFIFO_EMPTY_THRHD_S 8
|
||||
#define UART_RXFIFO_FULL_THRHD 0x0000007F
|
||||
#define UART_RXFIFO_FULL_THRHD_S 0
|
||||
|
||||
#define UART_LOWPULSE(i) (REG_UART_BASE(i) + 0x28)
|
||||
#define UART_LOWPULSE_MIN_CNT 0x000FFFFF
|
||||
#define UART_LOWPULSE_MIN_CNT_S 0
|
||||
|
||||
#define UART_HIGHPULSE(i) (REG_UART_BASE(i) + 0x2C)
|
||||
#define UART_HIGHPULSE_MIN_CNT 0x000FFFFF
|
||||
#define UART_HIGHPULSE_MIN_CNT_S 0
|
||||
|
||||
#define UART_PULSE_NUM(i) (REG_UART_BASE(i) + 0x30)
|
||||
#define UART_PULSE_NUM_CNT 0x0003FF
|
||||
#define UART_PULSE_NUM_CNT_S 0
|
||||
|
||||
#define UART_DATE(i) (REG_UART_BASE(i) + 0x78)
|
||||
#define UART_ID(i) (REG_UART_BASE(i) + 0x7C)
|
||||
|
||||
#endif // UART_REGISTER_H_INCLUDED
|
110
components/esp8266/include/espressif/esp_common.h
Normal file
110
components/esp8266/include/espressif/esp_common.h
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_COMMON_H__
|
||||
#define __ESP_COMMON_H__
|
||||
|
||||
/** \mainpage ESP8266_RTOS_SDK
|
||||
*
|
||||
* - Misc APIs : misc APIs
|
||||
* - WiFi APIs : WiFi related APIs
|
||||
* - SoftAP APIs : ESP8266 Soft-AP APIs
|
||||
* - Station APIs : ESP8266 station APIs
|
||||
* - Common APIs : WiFi common APIs
|
||||
* - Force Sleep APIs : WiFi Force Sleep APIs
|
||||
* - Rate Control APIs : WiFi Rate Control APIs
|
||||
* - User IE APIs : WiFi User IE APIs
|
||||
* - Sniffer APIs : WiFi sniffer APIs
|
||||
* - WPS APIs : WiFi WPS APIs
|
||||
* - Smartconfig APIs : SmartConfig APIs
|
||||
* - AirKiss APIs : AirKiss APIs
|
||||
* - Spiffs APIs : Spiffs APIs
|
||||
* - SSC APIs : Simple Serial Command APIs
|
||||
* - System APIs : System APIs
|
||||
* - Boot APIs : Boot mode APIs
|
||||
* - Upgrade APIs : Firmware upgrade (FOTA) APIs
|
||||
* - Software timer APIs : Software timer APIs
|
||||
* - Network Espconn APIs : Network espconn APIs
|
||||
* - ESP-NOW APIs : ESP-NOW APIs
|
||||
* - Mesh APIs : Mesh APIs
|
||||
* - Driver APIs : Driver APIs
|
||||
* - PWM Driver APIs : PWM driver APIs
|
||||
* - UART Driver APIs : UART driver APIs
|
||||
* - GPIO Driver APIs : GPIO driver APIs
|
||||
* - SPI Driver APIs : SPI Flash APIs
|
||||
* - Hardware timer APIs : Hardware timer APIs
|
||||
*
|
||||
* void user_init(void) is the entrance function of the application.
|
||||
* @attention 1. It is recommended that users set the timer to the periodic mode
|
||||
* for periodic checks.
|
||||
* @attention (1). In freeRTOS timer or os_timer, do not delay by while(1) or
|
||||
* in the manner that will block the thread.
|
||||
* @attention (2). The timer callback should not occupy CPU more than 15ms.
|
||||
* @attention (3). os_timer_t should not define a local variable, it has to be global varialbe
|
||||
* or memory got by malloc.
|
||||
*
|
||||
* @attention 2. Since esp_iot_rtos_sdk_v1.0.4, functions are stored in CACHE by
|
||||
* default, need not be added ICACHE_FLASH_ATTR any more. The interrupt
|
||||
* functions can also be stored in CACHE. If users want to store some
|
||||
* frequently called functions in RAM, please add IRAM_ATTR before
|
||||
* functions' name.
|
||||
*
|
||||
* @attention 3. Network programming use socket, please do not bind to the same port.
|
||||
* @attention (1). If users want to create 3 or more than 3 TCP connections, please add
|
||||
* "TCP_WND = 2 x TCP_MSS;" in "user_init".
|
||||
*
|
||||
* @attention 4. Priority of the RTOS SDK is 15. xTaskCreate is an interface of
|
||||
* freeRTOS. For details of the freeRTOS and APIs of the system,
|
||||
* please visit http://www.freertos.org
|
||||
* @attention (1). When using xTaskCreate to create a task, the task stack range is [176, 512].
|
||||
* @attention (2). If an array whose length is over 60 bytes is used in a task,
|
||||
* it is suggested that users use malloc and free rather than local
|
||||
* variable to allocate array. Large local variables could lead to
|
||||
* task stack overflow.
|
||||
* @attention (3). The RTOS SDK takes some priorities. Priority of the pp task is
|
||||
* 13; priority of precise timer(ms) thread is 12; priority of the
|
||||
* TCP/IP task is 10; priority of the freeRTOS timer is 2; priority of
|
||||
* the idle task is 0.
|
||||
* @attention (4). Users can use tasks with priorities from 1 to 9.
|
||||
* @attention (5). Do not revise FreeRTOSConfig.h, configurations are decided by source code
|
||||
* inside the RTOS SDK, users can not change it.
|
||||
*/
|
||||
|
||||
#include "c_types.h"
|
||||
#include "esp_libc.h"
|
||||
#include "esp_misc.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_softap.h"
|
||||
#include "esp_sta.h"
|
||||
#include "esp_system.h"
|
||||
#include "esp_timer.h"
|
||||
#include "esp_ssc.h"
|
||||
|
||||
#include "esp8266/esp8266.h"
|
||||
|
||||
#include "smartconfig.h"
|
||||
#include "spi_flash.h"
|
||||
#include "pwm.h"
|
||||
|
||||
#endif
|
171
components/esp8266/include/espressif/esp_libc.h
Normal file
171
components/esp8266/include/espressif/esp_libc.h
Normal file
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_LIBC_H__
|
||||
#define __ESP_LIBC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
char *strcpy(char *dst, const char *src);
|
||||
char *strncpy(char *dst, const char *src, size_t n);
|
||||
int strcmp(const char *s1, const char *s2);
|
||||
int strncmp(const char *s1, const char *s2, size_t n);
|
||||
size_t strlen(const char *s);
|
||||
char *strstr(const char *s1, const char *s2);
|
||||
char *strcat(char *dst, const char *src);
|
||||
char *strncat(char *dst, const char *src, size_t count);
|
||||
size_t strspn(const char *s, const char *accept);
|
||||
size_t strcspn(const char *s, const char *reject);
|
||||
char *strtok_r(char *s, const char *delim, char **ptrptr);
|
||||
char *strtok(char *s, const char *delim);
|
||||
char *strrchr(const char *s, int c);
|
||||
char *strdup(const char *s);
|
||||
char *strchr(const char *s, int c);
|
||||
long strtol(const char *str, char **endptr, int base);
|
||||
|
||||
void bzero(void *s, size_t n);
|
||||
|
||||
void *memcpy(void *dst, const void *src, size_t n);
|
||||
void *memset(void *dst, int c, size_t n);
|
||||
int memcmp(const void *m1, const void *m2, size_t n);
|
||||
void *memmove(void *dst, const void *src, size_t n);
|
||||
|
||||
int rand(void);
|
||||
|
||||
int printf(const char *format, ...);
|
||||
int sprintf(char *out, const char *format, ...);
|
||||
int snprintf(char *buf, unsigned int count, const char *format, ...);
|
||||
int puts(const char *str);
|
||||
|
||||
void *malloc(size_t n);
|
||||
void free(void *p);
|
||||
void *calloc(size_t c, size_t n);
|
||||
void *zalloc(size_t n);
|
||||
void *realloc(void *p, size_t n);
|
||||
|
||||
int atoi(const char *s);
|
||||
long atol(const char *s);
|
||||
|
||||
unsigned long os_random(void);
|
||||
int os_get_random(unsigned char *buf, size_t len);
|
||||
|
||||
#ifndef os_printf
|
||||
/* NOTE: don't use printf_opt in irq handler, for test */
|
||||
#define os_printf(fmt, ...) do { \
|
||||
static const char flash_str[] ICACHE_RODATA_ATTR STORE_ATTR = fmt; \
|
||||
printf(flash_str, ##__VA_ARGS__); \
|
||||
} while(0)
|
||||
#endif
|
||||
|
||||
/* Note: check_memleak_debug_enable is a weak function inside SDK.
|
||||
* please copy following codes to user_main.c.
|
||||
#include "esp_libc.h"
|
||||
|
||||
bool ICACHE_FLASH_ATTR check_memleak_debug_enable(void)
|
||||
{
|
||||
return MEMLEAK_DEBUG_ENABLE;
|
||||
}
|
||||
*/
|
||||
|
||||
#ifndef MEMLEAK_DEBUG
|
||||
#define MEMLEAK_DEBUG_ENABLE 0
|
||||
#ifndef os_free
|
||||
#define os_free(s) free(s)
|
||||
#endif
|
||||
|
||||
#ifndef os_malloc
|
||||
#define os_malloc(s) malloc(s)
|
||||
#endif
|
||||
|
||||
#ifndef os_calloc
|
||||
#define os_calloc(p, s) calloc(p, s)
|
||||
#endif
|
||||
|
||||
#ifndef os_realloc
|
||||
#define os_realloc(p, s) realloc(p, s)
|
||||
#endif
|
||||
|
||||
#ifndef os_zalloc
|
||||
#define os_zalloc(s) zalloc(s)
|
||||
#endif
|
||||
#else
|
||||
#define MEMLEAK_DEBUG_ENABLE 1
|
||||
|
||||
#ifndef os_free
|
||||
#define os_free(s) \
|
||||
do{\
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
vPortFree(s, mem_debug_file, __LINE__);\
|
||||
}while(0)
|
||||
#endif
|
||||
|
||||
#ifndef os_malloc
|
||||
#define os_malloc(s) \
|
||||
({ \
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
pvPortMalloc(s, mem_debug_file, __LINE__, false); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef os_malloc_iram
|
||||
#define os_malloc_iram(s) \
|
||||
({ \
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
pvPortMalloc(s, mem_debug_file, __LINE__, true); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef os_calloc
|
||||
#define os_calloc(p, s) \
|
||||
({ \
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
pvPortCalloc(p, s, mem_debug_file, __LINE__); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef os_realloc
|
||||
#define os_realloc(p, s) \
|
||||
({ \
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
pvPortRealloc(p, s, mem_debug_file, __LINE__); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#ifndef os_zalloc
|
||||
#define os_zalloc(s) \
|
||||
({ \
|
||||
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__; \
|
||||
pvPortZalloc(s, mem_debug_file, __LINE__); \
|
||||
})
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __LIBC_H__ */
|
108
components/esp8266/include/espressif/esp_misc.h
Normal file
108
components/esp8266/include/espressif/esp_misc.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_MISC_H__
|
||||
#define __ESP_MISC_H__
|
||||
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup Misc_APIs Misc APIs
|
||||
* @brief misc APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup Misc_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
|
||||
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
|
||||
|
||||
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \
|
||||
ip4_addr2_16(ipaddr), \
|
||||
ip4_addr3_16(ipaddr), \
|
||||
ip4_addr4_16(ipaddr)
|
||||
|
||||
#define IPSTR "%d.%d.%d.%d"
|
||||
|
||||
/**
|
||||
* @brief Delay function, maximum value: 65535 us.
|
||||
*
|
||||
* @param uint16 us : delay time, uint: us, maximum value: 65535 us
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_delay_us(uint16 us);
|
||||
|
||||
/**
|
||||
* @brief Register the print output function.
|
||||
*
|
||||
* @attention os_install_putc1((void *)uart1_write_char) in uart_init will set
|
||||
* printf to print from UART 1, otherwise, printf will start from
|
||||
* UART 0 by default.
|
||||
*
|
||||
* @param void(*p)(char c) - pointer of print function
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_install_putc1(void (*p)(char c));
|
||||
|
||||
/**
|
||||
* @brief Print a character. Start from from UART0 by default.
|
||||
*
|
||||
* @param char c - character to be printed
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_putc(char c);
|
||||
|
||||
enum dhcp_status {
|
||||
DHCP_STOPPED, /**< disable DHCP */
|
||||
DHCP_STARTED /**< enable DHCP */
|
||||
};
|
||||
|
||||
struct dhcps_lease {
|
||||
bool enable; /**< enable DHCP lease or not */
|
||||
struct ip_addr start_ip; /**< start IP of IP range */
|
||||
struct ip_addr end_ip; /**< end IP of IP range */
|
||||
};
|
||||
|
||||
enum dhcps_offer_option {
|
||||
OFFER_START = 0x00, /**< DHCP offer option start */
|
||||
OFFER_ROUTER = 0x01, /**< DHCP offer router, only support this option now */
|
||||
OFFER_END /**< DHCP offer option start */
|
||||
};
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
290
components/esp8266/include/espressif/esp_softap.h
Normal file
290
components/esp8266/include/espressif/esp_softap.h
Normal file
@ -0,0 +1,290 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_SOFTAP_H__
|
||||
#define __ESP_SOFTAP_H__
|
||||
|
||||
#include "queue.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup WiFi_APIs WiFi Related APIs
|
||||
* @brief WiFi APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup WiFi_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup SoftAP_APIs SoftAP APIs
|
||||
* @brief ESP8266 Soft-AP APIs
|
||||
* @attention To call APIs related to ESP8266 soft-AP has to enable soft-AP mode first (wifi_set_opmode)
|
||||
*/
|
||||
|
||||
/** @addtogroup SoftAP_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
struct softap_config {
|
||||
uint8 ssid[32]; /**< SSID of ESP8266 soft-AP */
|
||||
uint8 password[64]; /**< Password of ESP8266 soft-AP */
|
||||
uint8 ssid_len; /**< Length of SSID. If softap_config.ssid_len==0, check the SSID until there is a termination character; otherwise, set the SSID length according to softap_config.ssid_len. */
|
||||
uint8 channel; /**< Channel of ESP8266 soft-AP */
|
||||
AUTH_MODE authmode; /**< Auth mode of ESP8266 soft-AP. Do not support AUTH_WEP in soft-AP mode */
|
||||
uint8 ssid_hidden; /**< Broadcast SSID or not, default 0, broadcast the SSID */
|
||||
uint8 max_connection; /**< Max number of stations allowed to connect in, default 4, max 4 */
|
||||
uint16 beacon_interval; /**< Beacon interval, 100 ~ 60000 ms, default 100 */
|
||||
};
|
||||
|
||||
struct station_info {
|
||||
STAILQ_ENTRY(station_info) next; /**< Information of next AP */
|
||||
|
||||
uint8 bssid[6]; /**< BSSID of AP */
|
||||
struct ip_addr ip; /**< IP address of AP */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Get the current configuration of the ESP8266 WiFi soft-AP
|
||||
*
|
||||
* @param struct softap_config *config : ESP8266 soft-AP configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_get_config(struct softap_config *config);
|
||||
|
||||
/**
|
||||
* @brief Get the configuration of the ESP8266 WiFi soft-AP saved in the flash
|
||||
*
|
||||
* @param struct softap_config *config : ESP8266 soft-AP configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_get_config_default(struct softap_config *config);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the WiFi soft-AP and save it to the Flash.
|
||||
*
|
||||
* @attention 1. This configuration will be saved in flash system parameter area if changed
|
||||
* @attention 2. The ESP8266 is limited to only one channel, so when in the soft-AP+station mode,
|
||||
* the soft-AP will adjust its channel automatically to be the same as
|
||||
* the channel of the ESP8266 station.
|
||||
*
|
||||
* @param struct softap_config *config : ESP8266 soft-AP configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_set_config(struct softap_config *config);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the WiFi soft-AP; the configuration will
|
||||
* not be saved to the Flash.
|
||||
*
|
||||
* @attention The ESP8266 is limited to only one channel, so when in the soft-AP+station mode,
|
||||
* the soft-AP will adjust its channel automatically to be the same as
|
||||
* the channel of the ESP8266 station.
|
||||
*
|
||||
* @param struct softap_config *config : ESP8266 soft-AP configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_set_config_current(struct softap_config *config);
|
||||
|
||||
/**
|
||||
* @brief Get the number of stations connected to the ESP8266 soft-AP.
|
||||
*
|
||||
* @attention The ESP8266 is limited to only one channel, so when in the soft-AP+station mode,
|
||||
* the soft-AP will adjust its channel automatically to be the same as
|
||||
* the channel of the ESP8266 station.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return the number of stations connected to the ESP8266 soft-AP
|
||||
*/
|
||||
uint8 wifi_softap_get_station_num(void);
|
||||
|
||||
/**
|
||||
* @brief Get the information of stations connected to the ESP8266 soft-AP,
|
||||
* including MAC and IP.
|
||||
*
|
||||
* @attention wifi_softap_get_station_info depends on DHCP, it can only
|
||||
* be used when DHCP is enabled, so it can not get the static IP.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return struct station_info* : station information structure
|
||||
*/
|
||||
struct station_info *wifi_softap_get_station_info(void);
|
||||
|
||||
/**
|
||||
* @brief Free the space occupied by station_info when wifi_softap_get_station_info is called.
|
||||
*
|
||||
* @attention The ESP8266 is limited to only one channel, so when in the soft-AP+station mode,
|
||||
* the soft-AP will adjust its channel automatically to be the same as
|
||||
* the channel of the ESP8266 station.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void wifi_softap_free_station_info(void);
|
||||
|
||||
/**
|
||||
* @brief Enable the ESP8266 soft-AP DHCP server.
|
||||
*
|
||||
* @attention 1. The DHCP is enabled by default.
|
||||
* @attention 2. The DHCP and the static IP related API (wifi_set_ip_info) influence
|
||||
* each other, if the DHCP is enabled, the static IP will be disabled;
|
||||
* if the static IP is enabled, the DHCP will be disabled.
|
||||
* It depends on the latest configuration.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_dhcps_start(void);
|
||||
|
||||
/**
|
||||
* @brief Disable the ESP8266 soft-AP DHCP server. The DHCP is enabled by default.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_dhcps_stop(void);
|
||||
|
||||
/**
|
||||
* @brief Get the ESP8266 soft-AP DHCP server status.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return enum dhcp_status
|
||||
*/
|
||||
enum dhcp_status wifi_softap_dhcps_status(void);
|
||||
|
||||
/**
|
||||
* @brief Query the IP range that can be got from the ESP8266 soft-AP DHCP server.
|
||||
*
|
||||
* @attention This API can only be called during ESP8266 soft-AP DHCP server enabled.
|
||||
*
|
||||
* @param struct dhcps_lease *please : IP range of the ESP8266 soft-AP DHCP server.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_get_dhcps_lease(struct dhcps_lease *please);
|
||||
|
||||
/**
|
||||
* @brief Set the IP range of the ESP8266 soft-AP DHCP server.
|
||||
*
|
||||
* @attention 1. The IP range should be in the same sub-net with the ESP8266
|
||||
* soft-AP IP address.
|
||||
* @attention 2. This API should only be called when the DHCP server is disabled
|
||||
* (wifi_softap_dhcps_stop).
|
||||
* @attention 3. This configuration will only take effect the next time when the
|
||||
* DHCP server is enabled (wifi_softap_dhcps_start).
|
||||
* - If the DHCP server is disabled again, this API should be called to set the IP range.
|
||||
* - Otherwise, when the DHCP server is enabled later, the default IP range will be used.
|
||||
*
|
||||
* @param struct dhcps_lease *please : IP range of the ESP8266 soft-AP DHCP server.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please);
|
||||
|
||||
/**
|
||||
* @brief Get ESP8266 soft-AP DHCP server lease time.
|
||||
*
|
||||
* @attention This API can only be called during ESP8266 soft-AP DHCP server enabled.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return lease time, uint: minute.
|
||||
*/
|
||||
uint32 wifi_softap_get_dhcps_lease_time(void);
|
||||
|
||||
/**
|
||||
* @brief Set ESP8266 soft-AP DHCP server lease time, default is 120 minutes.
|
||||
*
|
||||
* @attention This API can only be called during ESP8266 soft-AP DHCP server enabled.
|
||||
*
|
||||
* @param uint32 minute : lease time, uint: minute, range:[1, 2880].
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_set_dhcps_lease_time(uint32 minute);
|
||||
|
||||
/**
|
||||
* @brief Reset ESP8266 soft-AP DHCP server lease time which is 120 minutes by default.
|
||||
*
|
||||
* @attention This API can only be called during ESP8266 soft-AP DHCP server enabled.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_reset_dhcps_lease_time(void);
|
||||
|
||||
/**
|
||||
* @brief Set the ESP8266 soft-AP DHCP server option.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* uint8 mode = 0;
|
||||
* wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode);
|
||||
* </pre>
|
||||
*
|
||||
* @param uint8 level : OFFER_ROUTER, set the router option.
|
||||
* @param void* optarg :
|
||||
* - bit0, 0 disable the router information;
|
||||
* - bit0, 1 enable the router information.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_softap_set_dhcps_offer_option(uint8 level, void *optarg);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
125
components/esp8266/include/espressif/esp_ssc.h
Normal file
125
components/esp8266/include/espressif/esp_ssc.h
Normal file
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_SSC_H__
|
||||
#define __ESP_SSC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CMD_T_ASYNC 0x01
|
||||
#define CMD_T_SYNC 0x02
|
||||
|
||||
typedef struct cmd_s {
|
||||
char *cmd_str;
|
||||
uint8 flag;
|
||||
uint8 id;
|
||||
void (* cmd_func)(void);
|
||||
void (* cmd_callback)(void *arg);
|
||||
} ssc_cmd_t;
|
||||
|
||||
#define MAX_LINE_N 127
|
||||
|
||||
typedef enum {
|
||||
SSC_BR_9600 = 9600,
|
||||
SSC_BR_19200 = 19200,
|
||||
SSC_BR_38400 = 38400,
|
||||
SSC_BR_57600 = 57600,
|
||||
SSC_BR_74880 = 74880,
|
||||
SSC_BR_115200 = 115200,
|
||||
SSC_BR_230400 = 230400,
|
||||
SSC_BR_460800 = 460800,
|
||||
SSC_BR_921600 = 921600
|
||||
} SscBaudRate;
|
||||
|
||||
/** \defgroup SSC_APIs SSC APIs
|
||||
* @brief SSC APIs
|
||||
*
|
||||
* SSC means simple serial command.
|
||||
* SSC APIs allows users to define their own command, users can refer to spiffs_test/test_main.c.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup SSC_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Initial the ssc function.
|
||||
*
|
||||
* @param SscBaudRate bandrate : baud rate
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void ssc_attach(SscBaudRate bandrate);
|
||||
|
||||
/**
|
||||
* @brief Get the length of the simple serial command.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return length of the command.
|
||||
*/
|
||||
int ssc_param_len(void);
|
||||
|
||||
/**
|
||||
* @brief Get the simple serial command string.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return the command.
|
||||
*/
|
||||
char *ssc_param_str(void);
|
||||
|
||||
/**
|
||||
* @brief Parse the simple serial command (ssc).
|
||||
*
|
||||
* @param char *pLine : [input] the ssc string
|
||||
* @param char *argv[] : [output] parameters of the ssc
|
||||
*
|
||||
* @return the number of parameters.
|
||||
*/
|
||||
int ssc_parse_param(char *pLine, char *argv[]);
|
||||
|
||||
/**
|
||||
* @brief Register the user-defined simple serial command (ssc) set.
|
||||
*
|
||||
* @param ssc_cmd_t *cmdset : the ssc set
|
||||
* @param uint8 cmdnum : number of commands
|
||||
* @param void (* help)(void) : callback of user-guide
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void ssc_register(ssc_cmd_t *cmdset, uint8 cmdnum, void (* help)(void));
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __ESP_SSC_H__ */
|
431
components/esp8266/include/espressif/esp_sta.h
Normal file
431
components/esp8266/include/espressif/esp_sta.h
Normal file
@ -0,0 +1,431 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_STA_H__
|
||||
#define __ESP_STA_H__
|
||||
|
||||
#include "queue.h"
|
||||
#include "esp_wifi.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup WiFi_APIs WiFi Related APIs
|
||||
* @brief WiFi APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup WiFi_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup Station_APIs Station APIs
|
||||
* @brief ESP8266 station APIs
|
||||
* @attention To call APIs related to ESP8266 station has to enable station mode
|
||||
* first (wifi_set_opmode)
|
||||
*/
|
||||
|
||||
/** @addtogroup Station_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
struct station_config {
|
||||
uint8 ssid[32]; /**< SSID of target AP*/
|
||||
uint8 password[64]; /**< password of target AP*/
|
||||
uint8 bssid_set; /**< whether set MAC address of target AP or not. Generally, station_config.bssid_set needs to be 0; and it needs to be 1 only when users need to check the MAC address of the AP.*/
|
||||
uint8 bssid[6]; /**< MAC address of target AP*/
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Get the current configuration of the ESP8266 WiFi station.
|
||||
*
|
||||
* @param struct station_config *config : ESP8266 station configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_get_config(struct station_config *config);
|
||||
|
||||
/**
|
||||
* @brief Get the configuration parameters saved in the Flash of the ESP8266 WiFi station.
|
||||
*
|
||||
* @param struct station_config *config : ESP8266 station configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_get_config_default(struct station_config *config);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the ESP8266 station and save it to the Flash.
|
||||
*
|
||||
* @attention 1. This API can be called only when the ESP8266 station is enabled.
|
||||
* @attention 2. If wifi_station_set_config is called in user_init , there is no
|
||||
* need to call wifi_station_connect.
|
||||
* The ESP8266 station will automatically connect to the AP (router)
|
||||
* after the system initialization. Otherwise, wifi_station_connect should be called.
|
||||
* @attention 3. Generally, station_config.bssid_set needs to be 0; and it needs
|
||||
* to be 1 only when users need to check the MAC address of the AP.
|
||||
* @attention 4. This configuration will be saved in the Flash system parameter area if changed.
|
||||
*
|
||||
* @param struct station_config *config : ESP8266 station configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_set_config(struct station_config *config);
|
||||
|
||||
/**
|
||||
* @brief Set the configuration of the ESP8266 station. And the configuration
|
||||
* will not be saved to the Flash.
|
||||
*
|
||||
* @attention 1. This API can be called only when the ESP8266 station is enabled.
|
||||
* @attention 2. If wifi_station_set_config_current is called in user_init , there
|
||||
* is no need to call wifi_station_connect.
|
||||
* The ESP8266 station will automatically connect to the AP (router)
|
||||
* after the system initialization. Otherwise, wifi_station_connect
|
||||
* should be called.
|
||||
* @attention 3. Generally, station_config.bssid_set needs to be 0; and it needs
|
||||
* to be 1 only when users need to check the MAC address of the AP.
|
||||
*
|
||||
* @param struct station_config *config : ESP8266 station configuration
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_set_config_current(struct station_config *config);
|
||||
|
||||
/**
|
||||
* @brief Connect the ESP8266 WiFi station to the AP.
|
||||
*
|
||||
* @attention 1. This API should be called when the ESP8266 station is enabled,
|
||||
* and the system initialization is completed. Do not call this API in user_init.
|
||||
* @attention 2. If the ESP8266 is connected to an AP, call wifi_station_disconnect to disconnect.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_connect(void);
|
||||
|
||||
/**
|
||||
* @brief Disconnect the ESP8266 WiFi station from the AP.
|
||||
*
|
||||
* @attention This API should be called when the ESP8266 station is enabled,
|
||||
* and the system initialization is completed. Do not call this API in user_init.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_disconnect(void);
|
||||
|
||||
typedef enum {
|
||||
WIFI_SCAN_TYPE_ACTIVE = 0, /**< active scan */
|
||||
WIFI_SCAN_TYPE_PASSIVE, /**< passive scan */
|
||||
} wifi_scan_type_t;
|
||||
|
||||
/** @brief Range of active scan times per channel */
|
||||
typedef struct {
|
||||
uint32_t min; /**< minimum active scan time per channel, units: millisecond */
|
||||
uint32_t max; /**< maximum active scan time per channel, units: millisecond, values above 1500ms may
|
||||
cause station to disconnect from AP and are not recommended. */
|
||||
} wifi_active_scan_time_t;
|
||||
|
||||
/** @brief Aggregate of active & passive scan time per channel */
|
||||
typedef union {
|
||||
wifi_active_scan_time_t active; /**< active scan time per channel, units: millisecond. */
|
||||
uint32_t passive; /**< passive scan time per channel, units: millisecond, values above 1500ms may
|
||||
cause station to disconnect from AP and are not recommended. */
|
||||
} wifi_scan_time_t;
|
||||
|
||||
struct scan_config {
|
||||
uint8 *ssid; /**< SSID of AP */
|
||||
uint8 *bssid; /**< MAC address of AP */
|
||||
uint8 channel; /**< channel, scan the specific channel */
|
||||
uint8 show_hidden; /**< enable to scan AP whose SSID is hidden */
|
||||
wifi_scan_type_t scan_type; /**< scan type, active or passive */
|
||||
wifi_scan_time_t scan_time; /**< scan time per channel */
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
CIPHER_NONE = 0, /**< the cipher type is none */
|
||||
CIPHER_WEP40, /**< the cipher type is WEP40 */
|
||||
CIPHER_WEP104, /**< the cipher type is WEP104 */
|
||||
CIPHER_TKIP, /**< the cipher type is TKIP */
|
||||
CIPHER_CCMP, /**< the cipher type is CCMP */
|
||||
CIPHER_TKIP_CCMP, /**< the cipher type is TKIP and CCMP */
|
||||
CIPHER_UNKNOWN, /**< the cipher type is unknown */
|
||||
} CIPHER_TYPE;
|
||||
|
||||
struct bss_info {
|
||||
STAILQ_ENTRY(bss_info) next; /**< information of next AP */
|
||||
|
||||
uint8 bssid[6]; /**< MAC address of AP */
|
||||
uint8 ssid[32]; /**< SSID of AP */
|
||||
uint8 ssid_len; /**< SSID length */
|
||||
uint8 channel; /**< channel of AP */
|
||||
sint8 rssi; /**< single strength of AP */
|
||||
AUTH_MODE authmode; /**< authmode of AP */
|
||||
uint8 is_hidden; /**< SSID of current AP is hidden or not. */
|
||||
sint16 freq_offset; /**< frequency offset */
|
||||
sint16 freqcal_val;
|
||||
uint8 *esp_mesh_ie;
|
||||
CIPHER_TYPE pairwise_cipher; /**< pairwise cipher of AP */
|
||||
CIPHER_TYPE group_cipher; /**< group cipher of AP */
|
||||
uint32_t phy_11b:1; /**< bit: 0 flag to identify if 11b mode is enabled or not */
|
||||
uint32_t phy_11g:1; /**< bit: 1 flag to identify if 11g mode is enabled or not */
|
||||
uint32_t phy_11n:1; /**< bit: 2 flag to identify if 11n mode is enabled or not */
|
||||
uint32_t wps:1; /**< bit: 3 flag to identify if WPS is supported or not */
|
||||
uint32_t reserved:28; /**< bit: 4..31 reserved */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Callback function for wifi_station_scan.
|
||||
*
|
||||
* @param void *arg : information of APs that are found; save them as linked list;
|
||||
* refer to struct bss_info
|
||||
* @param STATUS status : status of scanning
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (* scan_done_cb_t)(void *arg, STATUS status);
|
||||
|
||||
/**
|
||||
* @brief Scan all available APs.
|
||||
*
|
||||
* @attention This API should be called when the ESP8266 station is enabled, and
|
||||
* the system initialization is completed. Do not call this API in user_init.
|
||||
*
|
||||
* @param struct scan_config *config : configuration of scanning
|
||||
* @param struct scan_done_cb_t cb : callback of scanning
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb);
|
||||
|
||||
/**
|
||||
* @brief Check if the ESP8266 station will connect to the recorded AP automatically
|
||||
* when the power is on.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : connect to the AP automatically
|
||||
* @return false : not connect to the AP automatically
|
||||
*/
|
||||
bool wifi_station_get_auto_connect(void);
|
||||
|
||||
/**
|
||||
* @brief Set whether the ESP8266 station will connect to the recorded AP
|
||||
* automatically when the power is on. It will do so by default.
|
||||
*
|
||||
* @attention 1. If this API is called in user_init, it is effective immediately
|
||||
* after the power is on. If it is called in other places, it will
|
||||
* be effective the next time when the power is on.
|
||||
* @attention 2. This configuration will be saved in Flash system parameter area if changed.
|
||||
*
|
||||
* @param bool set : If it will automatically connect to the AP when the power is on
|
||||
* - true : it will connect automatically
|
||||
* - false: it will not connect automatically
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_set_auto_connect(bool set);
|
||||
|
||||
/**
|
||||
* @brief Check whether the ESP8266 station will reconnect to the AP after disconnection.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_get_reconnect_policy(void);
|
||||
|
||||
/**
|
||||
* @brief Set whether the ESP8266 station will reconnect to the AP after disconnection.
|
||||
* It will do so by default.
|
||||
*
|
||||
* @attention If users want to call this API, it is suggested that users call this API in user_init.
|
||||
*
|
||||
* @param bool set : if it's true, it will enable reconnection; if it's false,
|
||||
* it will disable reconnection.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_set_reconnect_policy(bool set);
|
||||
|
||||
typedef enum {
|
||||
STATION_IDLE = 0, /**< ESP8266 station idle */
|
||||
STATION_CONNECTING, /**< ESP8266 station is connecting to AP*/
|
||||
STATION_WRONG_PASSWORD, /**< the password is wrong*/
|
||||
STATION_NO_AP_FOUND, /**< ESP8266 station can not find the target AP*/
|
||||
STATION_CONNECT_FAIL, /**< ESP8266 station fail to connect to AP*/
|
||||
STATION_GOT_IP /**< ESP8266 station got IP address from AP*/
|
||||
} STATION_STATUS;
|
||||
|
||||
/**
|
||||
* @brief Get the connection status of the ESP8266 WiFi station.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return the status of connection
|
||||
*/
|
||||
STATION_STATUS wifi_station_get_connect_status(void);
|
||||
|
||||
/**
|
||||
* @brief Get the information of APs (5 at most) recorded by ESP8266 station.
|
||||
*
|
||||
* @param struct station_config config[] : information of the APs, the array size should be 5.
|
||||
*
|
||||
* @return The number of APs recorded.
|
||||
*/
|
||||
uint8 wifi_station_get_current_ap_id(void);
|
||||
|
||||
/**
|
||||
* @brief Switch the ESP8266 station connection to a recorded AP.
|
||||
*
|
||||
* @param uint8 new_ap_id : AP's record id, start counting from 0.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_ap_change(uint8 current_ap_id);
|
||||
|
||||
/**
|
||||
* @brief Set the number of APs that can be recorded in the ESP8266 station.
|
||||
* When the ESP8266 station is connected to an AP, the SSID and password
|
||||
* of the AP will be recorded.
|
||||
*
|
||||
* @attention This configuration will be saved in the Flash system parameter area if changed.
|
||||
*
|
||||
* @param uint8 ap_number : the number of APs that can be recorded (MAX: 5)
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_ap_number_set(uint8 ap_number);
|
||||
|
||||
/**
|
||||
* @brief Get the information of APs (5 at most) recorded by ESP8266 station.
|
||||
*
|
||||
* Example:
|
||||
* <pre>
|
||||
* struct station_config config[5];
|
||||
* nt i = wifi_station_get_ap_info(config);
|
||||
* </pre>
|
||||
*
|
||||
* @param struct station_config config[] : information of the APs, the array size should be 5.
|
||||
*
|
||||
* @return The number of APs recorded.
|
||||
*/
|
||||
uint8 wifi_station_get_ap_info(struct station_config config[]);
|
||||
|
||||
/**
|
||||
* @brief Get rssi of the AP which ESP8266 station connected to.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 31 : fail, invalid value.
|
||||
* @return others : succeed, value of rssi. In general, rssi value < 10
|
||||
*/
|
||||
sint8 wifi_station_get_rssi(void);
|
||||
|
||||
/**
|
||||
* @brief Enable the ESP8266 station DHCP client.
|
||||
*
|
||||
* @attention 1. The DHCP is enabled by default.
|
||||
* @attention 2. The DHCP and the static IP API ((wifi_set_ip_info)) influence each other,
|
||||
* and if the DHCP is enabled, the static IP will be disabled;
|
||||
* if the static IP is enabled, the DHCP will be disabled.
|
||||
* It depends on the latest configuration.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_dhcpc_start(void);
|
||||
|
||||
/**
|
||||
* @brief Disable the ESP8266 station DHCP client.
|
||||
*
|
||||
* @attention 1. The DHCP is enabled by default.
|
||||
* @attention 2. The DHCP and the static IP API ((wifi_set_ip_info)) influence each other,
|
||||
* and if the DHCP is enabled, the static IP will be disabled;
|
||||
* if the static IP is enabled, the DHCP will be disabled.
|
||||
* It depends on the latest configuration.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_dhcpc_stop(void);
|
||||
|
||||
/**
|
||||
* @brief Get the ESP8266 station DHCP client status.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return enum dhcp_status
|
||||
*/
|
||||
enum dhcp_status wifi_station_dhcpc_status(void);
|
||||
|
||||
/**
|
||||
* @brief Set ESP8266 station DHCP hostname.
|
||||
*
|
||||
* @param char *name : hostname of ESP8266 station
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_station_set_hostname(char *name);
|
||||
|
||||
/**
|
||||
* @brief Get ESP8266 station DHCP hostname.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return the hostname of ESP8266 station
|
||||
*/
|
||||
char* wifi_station_get_hostname(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
591
components/esp8266/include/espressif/esp_system.h
Normal file
591
components/esp8266/include/espressif/esp_system.h
Normal file
@ -0,0 +1,591 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_SYSTEM_H__
|
||||
#define __ESP_SYSTEM_H__
|
||||
|
||||
#include "c_types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup System_APIs System APIs
|
||||
* @brief System APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup System_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
REASON_DEFAULT_RST = 0, /**< normal startup by power on */
|
||||
REASON_WDT_RST, /**< hardware watch dog reset */
|
||||
REASON_EXCEPTION_RST, /**< exception reset, GPIO status won't change */
|
||||
REASON_SOFT_WDT_RST, /**< software watch dog reset, GPIO status won't change */
|
||||
REASON_SOFT_RESTART, /**< software restart ,system_restart , GPIO status won't change */
|
||||
REASON_DEEP_SLEEP_AWAKE, /**< wake up from deep-sleep */
|
||||
REASON_EXT_SYS_RST /**< external system reset */
|
||||
} rst_reason;
|
||||
|
||||
struct rst_info {
|
||||
rst_reason reason; /**< enum rst_reason */
|
||||
uint32 exccause;
|
||||
uint32 epc1;
|
||||
uint32 epc2;
|
||||
uint32 epc3;
|
||||
uint32 excvaddr;
|
||||
uint32 depc;
|
||||
uint32 rtn_addr;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Get the reason of restart.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return struct rst_info* : information of the system restart
|
||||
*/
|
||||
struct rst_info *system_get_rst_info(void);
|
||||
|
||||
/**
|
||||
* @brief Get information of the SDK version.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Information of the SDK version.
|
||||
*/
|
||||
const char *system_get_sdk_version(void);
|
||||
|
||||
/**
|
||||
* @brief Reset to default settings.
|
||||
*
|
||||
* Reset to default settings of the following APIs : wifi_station_set_auto_connect,
|
||||
* wifi_set_phy_mode, wifi_softap_set_config related, wifi_station_set_config
|
||||
* related, and wifi_set_opmode.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_restore(void);
|
||||
|
||||
/**
|
||||
* @brief Restart system.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_restart(void);
|
||||
|
||||
/**
|
||||
* @brief Set the chip to deep-sleep mode.
|
||||
*
|
||||
* The device will automatically wake up after the deep-sleep time set
|
||||
* by the users. Upon waking up, the device boots up from user_init.
|
||||
*
|
||||
* @attention 1. XPD_DCDC should be connected to EXT_RSTB through 0 ohm resistor
|
||||
* in order to support deep-sleep wakeup.
|
||||
* @attention 2. system_deep_sleep(0): there is no wake up timer; in order to wake
|
||||
* up, connect a GPIO to pin RST, the chip will wake up by a falling-edge
|
||||
* on pin RST
|
||||
*
|
||||
* @param uint32 time_in_us : deep-sleep time, unit: microsecond
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_deep_sleep(uint32 time_in_us);
|
||||
|
||||
/**
|
||||
* @brief Call this API before system_deep_sleep to set the activity after the
|
||||
* next deep-sleep wakeup.
|
||||
*
|
||||
* If this API is not called, default to be system_deep_sleep_set_option(1).
|
||||
*
|
||||
* @param uint8 option :
|
||||
* @param 0 : Radio calibration after the deep-sleep wakeup is decided by byte
|
||||
* 108 of esp_init_data_default.bin (0~127byte).
|
||||
* @param 1 : Radio calibration will be done after the deep-sleep wakeup. This
|
||||
* will lead to stronger current.
|
||||
* @param 2 : Radio calibration will not be done after the deep-sleep wakeup.
|
||||
* This will lead to weaker current.
|
||||
* @param 4 : Disable radio calibration after the deep-sleep wakeup (the same
|
||||
* as modem-sleep). This will lead to the weakest current, but the device
|
||||
* can't receive or transmit data after waking up.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_deep_sleep_set_option(uint8 option);
|
||||
|
||||
/**
|
||||
* @brief Get system time, unit: microsecond.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return System time, unit: microsecond.
|
||||
*/
|
||||
uint32 system_get_time(void);
|
||||
|
||||
/**
|
||||
* @brief Print the system memory distribution, including data/rodata/bss/heap.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_print_meminfo(void);
|
||||
|
||||
/**
|
||||
* @brief Get the size of available heap.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Available heap size.
|
||||
*/
|
||||
uint32 system_get_free_heap_size(void);
|
||||
|
||||
/**
|
||||
* @brief Get the chip ID.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return The chip ID.
|
||||
*/
|
||||
uint32 system_get_chip_id(void);
|
||||
|
||||
/**
|
||||
* @brief Get the RTC clock cycle.
|
||||
*
|
||||
* @attention 1. The RTC clock cycle has decimal part.
|
||||
* @attention 2. The RTC clock cycle will change according to the temperature,
|
||||
* so RTC timer is not very precise.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return RTC clock period (unit: microsecond), bit11~ bit0 are decimal.
|
||||
*/
|
||||
uint32 system_rtc_clock_cali_proc(void);
|
||||
|
||||
/**
|
||||
* @brief Get RTC time, unit: RTC clock cycle.
|
||||
*
|
||||
* Example:
|
||||
* If system_get_rtc_time returns 10 (it means 10 RTC cycles), and
|
||||
* system_rtc_clock_cali_proc returns 5.75 (it means 5.75 microseconds per RTC clock cycle),
|
||||
* (then the actual time is 10 x 5.75 = 57.5 microseconds.
|
||||
*
|
||||
* @attention System time will return to zero because of system_restart, but the
|
||||
* RTC time still goes on. If the chip is reset by pin EXT_RST or pin
|
||||
* CHIP_EN (including the deep-sleep wakeup), situations are shown as below:
|
||||
* @attention 1. reset by pin EXT_RST : RTC memory won't change, RTC timer returns to zero
|
||||
* @attention 2. watchdog reset : RTC memory won't change, RTC timer won't change
|
||||
* @attention 3. system_restart : RTC memory won't change, RTC timer won't change
|
||||
* @attention 4. power on : RTC memory is random value, RTC timer starts from zero
|
||||
* @attention 5. reset by pin CHIP_EN : RTC memory is random value, RTC timer starts from zero
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return RTC time.
|
||||
*/
|
||||
uint32 system_get_rtc_time(void);
|
||||
|
||||
/**
|
||||
* @brief Read user data from the RTC memory.
|
||||
*
|
||||
* The user data segment (512 bytes, as shown below) is used to store user data.
|
||||
*
|
||||
* |<---- system data(256 bytes) ---->|<----------- user data(512 bytes) --------->|
|
||||
*
|
||||
* @attention Read and write unit for data stored in the RTC memory is 4 bytes.
|
||||
* @attention src_addr is the block number (4 bytes per block). So when reading data
|
||||
* at the beginning of the user data segment, src_addr will be 256/4 = 64,
|
||||
* n will be data length.
|
||||
*
|
||||
* @param uint8 src : source address of rtc memory, src_addr >= 64
|
||||
* @param void *dst : data pointer
|
||||
* @param uint16 n : data length, unit: byte
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_rtc_mem_read(uint8 src, void *dst, uint16 n);
|
||||
|
||||
/**
|
||||
* @brief Write user data to the RTC memory.
|
||||
*
|
||||
* During deep-sleep, only RTC is working. So users can store their data
|
||||
* in RTC memory if it is needed. The user data segment below (512 bytes)
|
||||
* is used to store the user data.
|
||||
*
|
||||
* |<---- system data(256 bytes) ---->|<----------- user data(512 bytes) --------->|
|
||||
*
|
||||
* @attention Read and write unit for data stored in the RTC memory is 4 bytes.
|
||||
* @attention src_addr is the block number (4 bytes per block). So when storing data
|
||||
* at the beginning of the user data segment, src_addr will be 256/4 = 64,
|
||||
* n will be data length.
|
||||
*
|
||||
* @param uint8 src : source address of rtc memory, src_addr >= 64
|
||||
* @param void *dst : data pointer
|
||||
* @param uint16 n : data length, unit: byte
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_rtc_mem_write(uint8 dst, const void *src, uint16 n);
|
||||
|
||||
/**
|
||||
* @brief UART0 swap.
|
||||
*
|
||||
* Use MTCK as UART0 RX, MTDO as UART0 TX, so ROM log will not output from
|
||||
* this new UART0. We also need to use MTDO (U0RTS) and MTCK (U0CTS) as UART0 in hardware.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_uart_swap(void);
|
||||
|
||||
/**
|
||||
* @brief Disable UART0 swap.
|
||||
*
|
||||
* Use the original UART0, not MTCK and MTDO.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_uart_de_swap(void);
|
||||
|
||||
/**
|
||||
* @brief Measure the input voltage of TOUT pin 6, unit : 1/1024 V.
|
||||
*
|
||||
* @attention 1. system_adc_read can only be called when the TOUT pin is connected
|
||||
* to the external circuitry, and the TOUT pin input voltage should
|
||||
* be limited to 0~1.0V.
|
||||
* @attention 2. When the TOUT pin is connected to the external circuitry, the 107th
|
||||
* byte (vdd33_const) of esp_init_data_default.bin(0~127byte) should be
|
||||
* set as the real power voltage of VDD3P3 pin 3 and 4.
|
||||
* @attention 3. The unit of vdd33_const is 0.1V, the effective value range is [18, 36];
|
||||
* if vdd33_const is in [0, 18) or (36, 255), 3.3V is used to optimize RF by default.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Input voltage of TOUT pin 6, unit : 1/1024 V
|
||||
*/
|
||||
uint16 system_adc_read(void);
|
||||
|
||||
/**
|
||||
* @brief Measure the power voltage of VDD3P3 pin 3 and 4, unit : 1/1024 V.
|
||||
*
|
||||
* @attention 1. system_get_vdd33 depends on RF, please do not use it if RF is disabled.
|
||||
* @attention 2. system_get_vdd33 can only be called when TOUT pin is suspended.
|
||||
* @attention 3. The 107th byte in esp_init_data_default.bin (0~127byte) is named
|
||||
* as "vdd33_const", when TOUT pin is suspended vdd33_const must be
|
||||
* set as 0xFF, that is 255.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Power voltage of VDD33, unit : 1/1024 V
|
||||
*/
|
||||
uint16 system_get_vdd33(void);
|
||||
|
||||
/**
|
||||
* @brief Write data into flash with protection.
|
||||
*
|
||||
* Flash read/write has to be 4-bytes aligned.
|
||||
*
|
||||
* Protection of flash read/write :
|
||||
* use 3 sectors (4KBytes per sector) to save 4KB data with protect,
|
||||
* sector 0 and sector 1 are data sectors, back up each other,
|
||||
* save data alternately, sector 2 is flag sector, point out which sector
|
||||
* is keeping the latest data, sector 0 or sector 1.
|
||||
*
|
||||
* @param uint16 start_sec : start sector (sector 0) of the 3 sectors which are
|
||||
* used for flash read/write protection.
|
||||
* - For example, in IOT_Demo we can use the 3 sectors (3 * 4KB) starting from flash
|
||||
* 0x3D000 for flash read/write protection, so the parameter start_sec should be 0x3D
|
||||
* @param void *param : pointer of the data to be written
|
||||
* @param uint16 len : data length, should be less than a sector, which is 4 * 1024
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_param_save_with_protect(uint16 start_sec, void *param, uint16 len);
|
||||
|
||||
/**
|
||||
* @brief Read the data saved into flash with the read/write protection.
|
||||
*
|
||||
* Flash read/write has to be 4-bytes aligned.
|
||||
*
|
||||
* Read/write protection of flash:
|
||||
* use 3 sectors (4KB per sector) to save 4KB data with protect, sector
|
||||
* 0 and sector 1 are data sectors, back up each other, save data alternately,
|
||||
* sector 2 is flag sector, point out which sector is keeping the latest data,
|
||||
* sector 0 or sector 1.
|
||||
*
|
||||
* @param uint16 start_sec : start sector (sector 0) of the 3 sectors used for
|
||||
* flash read/write protection. It cannot be sector 1 or sector 2.
|
||||
* - For example, in IOT_Demo, the 3 sectors (3 * 4KB) starting from flash 0x3D000
|
||||
* can be used for flash read/write protection.
|
||||
* The parameter start_sec is 0x3D, and it cannot be 0x3E or 0x3F.
|
||||
* @param uint16 offset : offset of data saved in sector
|
||||
* @param void *param : data pointer
|
||||
* @param uint16 len : data length, offset + len =< 4 * 1024
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_param_load(uint16 start_sec, uint16 offset, void *param, uint16 len);
|
||||
|
||||
/**
|
||||
* @brief Set the maximum value of RF TX Power, unit : 0.25dBm.
|
||||
*
|
||||
* @param uint8 max_tpw : the maximum value of RF Tx Power, unit : 0.25dBm, range [0, 82].
|
||||
* It can be set refer to the 34th byte (target_power_qdb_0)
|
||||
* of esp_init_data_default.bin(0~127byte)
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_phy_set_max_tpw(uint8 max_tpw);
|
||||
|
||||
/**
|
||||
* @brief Adjust the RF TX Power according to VDD33, unit : 1/1024 V.
|
||||
*
|
||||
* @attention 1. When TOUT pin is suspended, VDD33 can be measured by system_get_vdd33.
|
||||
* @attention 2. When TOUT pin is connected to the external circuitry, system_get_vdd33
|
||||
* can not be used to measure VDD33.
|
||||
*
|
||||
* @param uint16 vdd33 : VDD33, unit : 1/1024V, range [1900, 3300]
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_phy_set_tpw_via_vdd33(uint16 vdd33);
|
||||
|
||||
/**
|
||||
* @brief Enable RF or not when wakeup from deep-sleep.
|
||||
*
|
||||
* @attention 1. This API can only be called in user_rf_pre_init.
|
||||
* @attention 2. Function of this API is similar to system_deep_sleep_set_option,
|
||||
* if they are both called, it will disregard system_deep_sleep_set_option
|
||||
* which is called before deep-sleep, and refer to system_phy_set_rfoption
|
||||
* which is called when deep-sleep wake up.
|
||||
* @attention 3. Before calling this API, system_deep_sleep_set_option should be called
|
||||
* once at least.
|
||||
*
|
||||
* @param uint8 option :
|
||||
* - 0 : Radio calibration after deep-sleep wake up depends on esp_init_data_default.bin (0~127byte) byte 108.
|
||||
* - 1 : Radio calibration is done after deep-sleep wake up; this increases the
|
||||
* current consumption.
|
||||
* - 2 : No radio calibration after deep-sleep wake up; this reduces the current consumption.
|
||||
* - 4 : Disable RF after deep-sleep wake up, just like modem sleep; this has the
|
||||
* least current consumption; the device is not able to transmit or receive
|
||||
* data after wake up.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_phy_set_rfoption(uint8 option);
|
||||
|
||||
/** @addtogroup Upgrade_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Check the user bin.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 0x00 : UPGRADE_FW_BIN1, i.e. user1.bin
|
||||
* @return 0x01 : UPGRADE_FW_BIN2, i.e. user2.bin
|
||||
*/
|
||||
uint8 system_upgrade_userbin_check(void);
|
||||
|
||||
/**
|
||||
* @brief Reboot system to use the new software.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_upgrade_reboot(void);
|
||||
|
||||
/**
|
||||
* @brief Check the upgrade status flag.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return #define UPGRADE_FLAG_IDLE 0x00
|
||||
* @return #define UPGRADE_FLAG_START 0x01
|
||||
* @return #define UPGRADE_FLAG_FINISH 0x02
|
||||
*/
|
||||
uint8 system_upgrade_flag_check();
|
||||
|
||||
/**
|
||||
* @brief Set the upgrade status flag.
|
||||
*
|
||||
* @attention After downloading new softwares, set the flag to UPGRADE_FLAG_FINISH
|
||||
* and call system_upgrade_reboot to reboot the system in order to run
|
||||
* the new software.
|
||||
*
|
||||
* @param uint8 flag:
|
||||
* - UPGRADE_FLAG_IDLE 0x00
|
||||
* - UPGRADE_FLAG_START 0x01
|
||||
* - UPGRADE_FLAG_FINISH 0x02
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_upgrade_flag_set(uint8 flag);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/** \defgroup System_boot_APIs Boot APIs
|
||||
* @brief boot APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup System_boot_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define SYS_BOOT_ENHANCE_MODE 0 /**< It can load and run firmware at any address, for Espressif factory test bin*/
|
||||
#define SYS_BOOT_NORMAL_MODE 1 /**< It can only load and run at some addresses of user1.bin (or user2.bin)*/
|
||||
|
||||
#define SYS_BOOT_NORMAL_BIN 0 /**< user1.bin or user2.bin*/
|
||||
#define SYS_BOOT_TEST_BIN 1 /**< can only be Espressif test bin*/
|
||||
|
||||
/**
|
||||
* @brief Get information of the boot version.
|
||||
*
|
||||
* @attention If boot version >= 1.3 , users can enable the enhanced boot mode
|
||||
* (refer to system_restart_enhance).
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Information of the boot version.
|
||||
*/
|
||||
uint8 system_get_boot_version(void);
|
||||
|
||||
/**
|
||||
* @brief Get the address of the current running user bin (user1.bin or user2.bin).
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return The address of the current running user bin.
|
||||
*/
|
||||
uint32 system_get_userbin_addr(void);
|
||||
|
||||
/**
|
||||
* @brief Get the boot mode.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return #define SYS_BOOT_ENHANCE_MODE 0
|
||||
* @return #define SYS_BOOT_NORMAL_MODE 1
|
||||
*/
|
||||
uint8 system_get_boot_mode(void);
|
||||
|
||||
/**
|
||||
* @brief Restarts the system, and enters the enhanced boot mode.
|
||||
*
|
||||
* @attention SYS_BOOT_TEST_BIN is used for factory test during production; users
|
||||
* can apply for the test bin from Espressif Systems.
|
||||
*
|
||||
* @param uint8 bin_type : type of bin
|
||||
* - #define SYS_BOOT_NORMAL_BIN 0 // user1.bin or user2.bin
|
||||
* - #define SYS_BOOT_TEST_BIN 1 // can only be Espressif test bin
|
||||
* @param uint32 bin_addr : starting address of the bin file
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_restart_enhance(uint8 bin_type, uint32 bin_addr);
|
||||
|
||||
typedef enum {
|
||||
FLASH_SIZE_4M_MAP_256_256 = 0, /**< Flash size : 4Mbits. Map : 256KBytes + 256KBytes */
|
||||
FLASH_SIZE_2M, /**< Flash size : 2Mbits. Map : 256KBytes */
|
||||
FLASH_SIZE_8M_MAP_512_512, /**< Flash size : 8Mbits. Map : 512KBytes + 512KBytes */
|
||||
FLASH_SIZE_16M_MAP_512_512, /**< Flash size : 16Mbits. Map : 512KBytes + 512KBytes */
|
||||
FLASH_SIZE_32M_MAP_512_512, /**< Flash size : 32Mbits. Map : 512KBytes + 512KBytes */
|
||||
FLASH_SIZE_16M_MAP_1024_1024, /**< Flash size : 16Mbits. Map : 1024KBytes + 1024KBytes */
|
||||
FLASH_SIZE_32M_MAP_1024_1024, /**< Flash size : 32Mbits. Map : 1024KBytes + 1024KBytes */
|
||||
FLASH_SIZE_32M_MAP_2048_2048, /**< attention: don't support now ,just compatible for nodemcu;
|
||||
Flash size : 32Mbits. Map : 2048KBytes + 2048KBytes */
|
||||
FLASH_SIZE_64M_MAP_1024_1024, /**< Flash size : 64Mbits. Map : 1024KBytes + 1024KBytes */
|
||||
FLASH_SIZE_128M_MAP_1024_1024 /**< Flash size : 128Mbits. Map : 1024KBytes + 1024KBytes */
|
||||
|
||||
} flash_size_map;
|
||||
|
||||
/**
|
||||
* @brief Get the current Flash size and Flash map.
|
||||
*
|
||||
* Flash map depends on the selection when compiling, more details in document
|
||||
* "2A-ESP8266__IOT_SDK_User_Manual"
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return enum flash_size_map
|
||||
*/
|
||||
flash_size_map system_get_flash_size_map(void);
|
||||
|
||||
#define SYS_CPU_80MHZ 80
|
||||
#define SYS_CPU_160MHZ 160
|
||||
|
||||
/**
|
||||
* @brief Set CPU frequency. Default is 80MHz.
|
||||
*
|
||||
* System bus frequency is 80MHz, will not be affected by CPU frequency.
|
||||
* The frequency of UART, SPI, or other peripheral devices, are divided
|
||||
* from system bus frequency, so they will not be affected by CPU frequency either.
|
||||
*
|
||||
* @param uint8 freq : CPU frequency, 80 or 160.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_update_cpu_freq(uint8 freq);
|
||||
|
||||
/**
|
||||
* @brief Get CPU frequency.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return CPU frequency, unit : MHz.
|
||||
*/
|
||||
uint8 system_get_cpu_freq(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
101
components/esp8266/include/espressif/esp_timer.h
Normal file
101
components/esp8266/include/espressif/esp_timer.h
Normal file
@ -0,0 +1,101 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP_TIMER_H__
|
||||
#define __ESP_TIMER_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* timer related */
|
||||
typedef void os_timer_func_t(void *timer_arg);
|
||||
|
||||
typedef struct _os_timer_t {
|
||||
struct _os_timer_t *timer_next;
|
||||
void *timer_handle;
|
||||
uint32 timer_expire;
|
||||
uint32 timer_period;
|
||||
os_timer_func_t *timer_func;
|
||||
bool timer_repeat_flag;
|
||||
void *timer_arg;
|
||||
} os_timer_t;
|
||||
|
||||
/** \defgroup Timer_APIs Software timer APIs
|
||||
* @brief Software timer APIs
|
||||
*
|
||||
* Timers of the following interfaces are software timers. Functions of the timers are executed during the tasks.
|
||||
* Since a task can be stopped, or be delayed because there are other tasks with higher priorities, the following os_timer interfaces cannot guarantee the precise execution of the timers.
|
||||
* - For the same timer, os_timer_arm (or os_timer_arm_us) cannot be invoked repeatedly. os_timer_disarm should be invoked first.
|
||||
* - os_timer_setfn can only be invoked when the timer is not enabled, i.e., after os_timer_disarm or before os_timer_arm (or os_timer_arm_us).
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup Timer_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Set the timer callback function.
|
||||
*
|
||||
* @attention 1. The callback function must be set in order to enable the timer.
|
||||
* @attention 2. Operating system scheduling is disabled in timer callback.
|
||||
*
|
||||
* @param os_timer_t *ptimer : Timer structure
|
||||
* @param os_timer_func_t *pfunction : timer callback function
|
||||
* @param void *parg : callback function parameter
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_timer_setfn(os_timer_t *ptimer, os_timer_func_t *pfunction, void *parg);
|
||||
|
||||
/**
|
||||
* @brief Enable the millisecond timer.
|
||||
*
|
||||
* @param os_timer_t *ptimer : timer structure
|
||||
* @param uint32_t milliseconds : Timing, unit: millisecond, range: 5 ~ 0x68DB8
|
||||
* @param bool repeat_flag : Whether the timer will be invoked repeatedly or not
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_timer_arm(os_timer_t *ptimer, uint32 msec, bool repeat_flag);
|
||||
|
||||
/**
|
||||
* @brief Disarm the timer
|
||||
*
|
||||
* @param os_timer_t *ptimer : Timer structure
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void os_timer_disarm(os_timer_t *ptimer);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
1072
components/esp8266/include/espressif/esp_wifi.h
Normal file
1072
components/esp8266/include/espressif/esp_wifi.h
Normal file
File diff suppressed because it is too large
Load Diff
139
components/esp8266/include/espressif/esp_wps.h
Normal file
139
components/esp8266/include/espressif/esp_wps.h
Normal file
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESPWPS_H__
|
||||
#define __ESPWPS_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup WiFi_APIs WiFi Related APIs
|
||||
* @brief WiFi APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup WiFi_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup WPS_APIs WPS APIs
|
||||
* @brief ESP8266 WPS APIs
|
||||
*
|
||||
* WPS can only be used when ESP8266 station is enabled.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup WPS_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef enum wps_type {
|
||||
WPS_TYPE_DISABLE = 0,
|
||||
WPS_TYPE_PBC,
|
||||
WPS_TYPE_PIN,
|
||||
WPS_TYPE_DISPLAY,
|
||||
WPS_TYPE_MAX,
|
||||
} WPS_TYPE_t;
|
||||
|
||||
enum wps_cb_status {
|
||||
WPS_CB_ST_SUCCESS = 0, /**< WPS succeed */
|
||||
WPS_CB_ST_FAILED, /**< WPS fail */
|
||||
WPS_CB_ST_TIMEOUT, /**< WPS timeout, fail */
|
||||
WPS_CB_ST_WEP, /**< WPS failed because that WEP is not supported */
|
||||
WPS_CB_ST_SCAN_ERR, /**< can not find the target WPS AP */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Enable Wi-Fi WPS function.
|
||||
*
|
||||
* @attention WPS can only be used when ESP8266 station is enabled.
|
||||
*
|
||||
* @param WPS_TYPE_t wps_type : WPS type, so far only WPS_TYPE_PBC is supported
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_wps_enable(WPS_TYPE_t wps_type);
|
||||
|
||||
/**
|
||||
* @brief Disable Wi-Fi WPS function and release resource it taken.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_wps_disable(void);
|
||||
|
||||
/**
|
||||
* @brief WPS starts to work.
|
||||
*
|
||||
* @attention WPS can only be used when ESP8266 station is enabled.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : WPS starts to work successfully, but does not mean WPS succeed.
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_wps_start(void);
|
||||
|
||||
/**
|
||||
* @brief WPS callback.
|
||||
*
|
||||
* @param int status : status of WPS, enum wps_cb_status.
|
||||
* - If parameter status == WPS_CB_ST_SUCCESS in WPS callback, it means WPS got AP's
|
||||
* information, user can call wifi_wps_disable to disable WPS and release resource,
|
||||
* then call wifi_station_connect to connect to target AP.
|
||||
* - Otherwise, it means that WPS fail, user can create a timer to retry WPS by
|
||||
* wifi_wps_start after a while, or call wifi_wps_disable to disable WPS and release resource.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*wps_st_cb_t)(int status);
|
||||
|
||||
/**
|
||||
* @brief Set WPS callback.
|
||||
*
|
||||
* @attention WPS can only be used when ESP8266 station is enabled.
|
||||
*
|
||||
* @param wps_st_cb_t cb : callback.
|
||||
*
|
||||
* @return true : WPS starts to work successfully, but does not mean WPS succeed.
|
||||
* @return false : fail
|
||||
*/
|
||||
bool wifi_set_wps_cb(wps_st_cb_t cb);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
704
components/esp8266/include/espressif/espconn.h
Normal file
704
components/esp8266/include/espressif/espconn.h
Normal file
@ -0,0 +1,704 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESPCONN_H__
|
||||
#define __ESPCONN_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef sint8 err_t;
|
||||
|
||||
typedef void *espconn_handle;
|
||||
|
||||
/** \defgroup Espconn_APIs Network Espconn APIs
|
||||
* @brief Network espconn APIs
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup Espconn_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief Connect callback.
|
||||
*
|
||||
* Callback which will be called if successful listening (ESP8266 as TCP server)
|
||||
* or connection (ESP8266 as TCP client) callback, register by espconn_regist_connectcb.
|
||||
*
|
||||
* @attention The pointer "void *arg" may be different in different callbacks, please don't
|
||||
* use this pointer directly to distinguish one from another in multiple connections,
|
||||
* use remote_ip and remote_port in espconn instead.
|
||||
*
|
||||
* @param void *arg : pointer corresponding structure espconn.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (* espconn_connect_callback)(void *arg);
|
||||
|
||||
/**
|
||||
* @brief Reconnect callback.
|
||||
*
|
||||
* Enter this callback when error occurred, TCP connection broke. This callback is
|
||||
* registered by espconn_regist_reconcb.
|
||||
*
|
||||
* @attention The pointer "void *arg" may be different in different callbacks, please don't
|
||||
* use this pointer directly to distinguish one from another in multiple connections,
|
||||
* use remote_ip and remote_port in espconn instead.
|
||||
*
|
||||
* @param void *arg : pointer corresponding structure espconn.
|
||||
* @param sint8 err : error code
|
||||
* - ESCONN_TIMEOUT - Timeout
|
||||
* - ESPCONN_ABRT - TCP connection aborted
|
||||
* - ESPCONN_RST - TCP connection abort
|
||||
* - ESPCONN_CLSD - TCP connection closed
|
||||
* - ESPCONN_CONN - TCP connection
|
||||
* - ESPCONN_HANDSHAKE - TCP SSL handshake fail
|
||||
* - ESPCONN_PROTO_MSG - SSL application invalid
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (* espconn_reconnect_callback)(void *arg, sint8 err);
|
||||
|
||||
/* Definitions for error constants. */
|
||||
|
||||
#define ESPCONN_OK 0 /**< No error, everything OK. */
|
||||
#define ESPCONN_MEM -1 /**< Out of memory. */
|
||||
#define ESPCONN_TIMEOUT -3 /**< Timeout. */
|
||||
#define ESPCONN_RTE -4 /**< Routing problem. */
|
||||
#define ESPCONN_INPROGRESS -5 /**< Operation in progress. */
|
||||
#define ESPCONN_MAXNUM -7 /**< Total number exceeds the maximum limitation. */
|
||||
|
||||
#define ESPCONN_ABRT -8 /**< Connection aborted. */
|
||||
#define ESPCONN_RST -9 /**< Connection reset. */
|
||||
#define ESPCONN_CLSD -10 /**< Connection closed. */
|
||||
#define ESPCONN_CONN -11 /**< Not connected. */
|
||||
|
||||
#define ESPCONN_ARG -12 /**< Illegal argument. */
|
||||
#define ESPCONN_IF -14 /**< UDP send error. */
|
||||
#define ESPCONN_ISCONN -15 /**< Already connected. */
|
||||
|
||||
/** Protocol family and type of the espconn */
|
||||
enum espconn_type {
|
||||
ESPCONN_INVALID = 0, /**< invalid type */
|
||||
ESPCONN_TCP = 0x10, /**< TCP */
|
||||
ESPCONN_UDP = 0x20, /**< UDP */
|
||||
};
|
||||
|
||||
/** Current state of the espconn. */
|
||||
enum espconn_state {
|
||||
ESPCONN_NONE, /**< idle state, no connection */
|
||||
ESPCONN_WAIT, /**< ESP8266 is as TCP client, and waiting for connection */
|
||||
ESPCONN_LISTEN, /**< ESP8266 is as TCP server, and waiting for connection */
|
||||
ESPCONN_CONNECT, /**< connected */
|
||||
ESPCONN_WRITE, /**< sending data */
|
||||
ESPCONN_READ, /**< receiving data */
|
||||
ESPCONN_CLOSE /**< connection closed */
|
||||
};
|
||||
|
||||
typedef struct _esp_tcp {
|
||||
int remote_port; /**< remote port of TCP connection */
|
||||
int local_port; /**< ESP8266's local port of TCP connection */
|
||||
uint8 local_ip[4]; /**< local IP of ESP8266 */
|
||||
uint8 remote_ip[4]; /**< remote IP of TCP connection */
|
||||
espconn_connect_callback connect_callback; /**< connected callback */
|
||||
espconn_reconnect_callback reconnect_callback; /**< as error handler, the TCP connection broke unexpectedly */
|
||||
espconn_connect_callback disconnect_callback; /**< disconnected callback */
|
||||
espconn_connect_callback write_finish_fn; /**< data send by espconn_send has wrote into buffer waiting for sending, or has sent successfully */
|
||||
} esp_tcp;
|
||||
|
||||
typedef struct _esp_udp {
|
||||
int remote_port; /**< remote port of UDP transmission */
|
||||
int local_port; /**< ESP8266's local port for UDP transmission */
|
||||
uint8 local_ip[4]; /**< local IP of ESP8266 */
|
||||
uint8 remote_ip[4]; /**< remote IP of UDP transmission */
|
||||
} esp_udp;
|
||||
|
||||
typedef struct _remot_info {
|
||||
enum espconn_state state; /**< state of espconn */
|
||||
int remote_port; /**< remote port */
|
||||
uint8 remote_ip[4]; /**< remote IP address */
|
||||
} remot_info;
|
||||
|
||||
/** A callback prototype to inform about events for a espconn */
|
||||
typedef void (* espconn_recv_callback)(void *arg, char *pdata, unsigned short len);
|
||||
typedef void (* espconn_sent_callback)(void *arg);
|
||||
|
||||
/** A espconn descriptor */
|
||||
struct espconn {
|
||||
enum espconn_type type; /**< type of the espconn (TCP or UDP) */
|
||||
enum espconn_state state; /**< current state of the espconn */
|
||||
union {
|
||||
esp_tcp *tcp;
|
||||
esp_udp *udp;
|
||||
} proto;
|
||||
espconn_recv_callback recv_callback; /**< data received callback */
|
||||
espconn_sent_callback sent_callback; /**< data sent callback */
|
||||
uint8 link_cnt; /**< link count */
|
||||
void *reserve; /**< reserved for user data */
|
||||
};
|
||||
|
||||
enum espconn_option {
|
||||
ESPCONN_START = 0x00, /**< no option, start enum. */
|
||||
ESPCONN_REUSEADDR = 0x01, /**< free memory after TCP disconnection happen, need not wait 2 minutes. */
|
||||
ESPCONN_NODELAY = 0x02, /**< disable nagle algorithm during TCP data transmission, quicken the data transmission. */
|
||||
ESPCONN_COPY = 0x04, /**< enable espconn_regist_write_finish, enter write_finish_callback means that the data espconn_send sending was written into 2920 bytes write-buffer waiting for sending or already sent. */
|
||||
ESPCONN_KEEPALIVE = 0x08, /**< enable TCP keep alive. */
|
||||
ESPCONN_END /**< no option, end enum. */
|
||||
};
|
||||
|
||||
enum espconn_level {
|
||||
ESPCONN_KEEPIDLE, /**< TCP keep-alive interval, unit : second. */
|
||||
ESPCONN_KEEPINTVL, /**< packet interval during TCP keep-alive, unit : second. */
|
||||
ESPCONN_KEEPCNT /**< maximum packet retry count of TCP keep-alive. */
|
||||
};
|
||||
|
||||
enum {
|
||||
ESPCONN_IDLE = 0,
|
||||
ESPCONN_CLIENT,
|
||||
ESPCONN_SERVER,
|
||||
ESPCONN_BOTH,
|
||||
ESPCONN_MAX
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief espconn initialization.
|
||||
*
|
||||
* @attention Please call this API in user_init, if you need to use espconn functions.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void espconn_init(void);
|
||||
|
||||
/**
|
||||
* @brief Connect to a TCP server (ESP8266 acting as TCP client).
|
||||
*
|
||||
* @attention If espconn_connect fail, returns non-0 value, there is no connection, so it
|
||||
* won't enter any espconn callback.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure, the espconn to
|
||||
* listen to the connection
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_RTE - Routing Problem
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_ISCONN - Already connected
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn
|
||||
*/
|
||||
sint8 espconn_connect(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Disconnect a TCP connection.
|
||||
*
|
||||
* @attention Don't call this API in any espconn callback. If needed, please use system
|
||||
* task to trigger espconn_disconnect.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn
|
||||
*/
|
||||
sint8 espconn_disconnect(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Delete a transmission.
|
||||
*
|
||||
* @attention Corresponding creation API :
|
||||
* - TCP: espconn_accept,
|
||||
* - UDP: espconn_create
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding network according
|
||||
* to structure espconn
|
||||
* - ESPCONN_INPROGRESS - the connection is still in progress, please call espconn_disconnect
|
||||
* to disconnect before delete it.
|
||||
*/
|
||||
sint8 espconn_delete(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Creates a TCP server (i.e. accepts connections).
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_ISCONN - Already connected
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn
|
||||
*/
|
||||
sint8 espconn_accept(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Create UDP transmission.
|
||||
*
|
||||
* @attention Parameter remote_ip and remote_port need to be set, do not set to be 0.
|
||||
*
|
||||
* @param struct espconn *espconn : the UDP control block structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_ISCONN - Already connected
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding UDP transmission
|
||||
* according to structure espconn
|
||||
*/
|
||||
sint8 espconn_create(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Get maximum number of how many TCP connections are allowed.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Maximum number of how many TCP connections are allowed.
|
||||
*/
|
||||
uint8 espconn_tcp_get_max_con(void);
|
||||
|
||||
/**
|
||||
* @brief Set the maximum number of how many TCP connection is allowed.
|
||||
*
|
||||
* @param uint8 num : Maximum number of how many TCP connection is allowed.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn
|
||||
*/
|
||||
sint8 espconn_tcp_set_max_con(uint8 num);
|
||||
|
||||
/**
|
||||
* @brief Get the maximum number of TCP clients which are allowed to connect to ESP8266 TCP server.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP server structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_tcp_get_max_con_allow(struct espconn *espconn);
|
||||
|
||||
/**
|
||||
* @brief Set the maximum number of TCP clients allowed to connect to ESP8266 TCP server.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP server structure
|
||||
* @param uint8 num : Maximum number of TCP clients which are allowed
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_tcp_set_max_con_allow(struct espconn *espconn, uint8 num);
|
||||
|
||||
/**
|
||||
* @brief Register timeout interval of ESP8266 TCP server.
|
||||
*
|
||||
* @attention 1. If timeout is set to 0, timeout will be disable and ESP8266 TCP server will
|
||||
* not disconnect TCP clients has stopped communication. This usage of timeout=0,
|
||||
* is deprecated.
|
||||
* @attention 2. This timeout interval is not very precise, only as reference.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param uint32 interval : timeout interval, unit: second, maximum: 7200 seconds
|
||||
* @param uint8 type_flag : 0, set for all connections; 1, set for a specific connection
|
||||
* - If the type_flag set to be 0, please call this API after espconn_accept, before listened
|
||||
* a TCP connection.
|
||||
* - If the type_flag set to be 1, the first parameter *espconn is the specific connection.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_time(struct espconn *espconn, uint32 interval, uint8 type_flag);
|
||||
|
||||
/**
|
||||
* @brief Get the information about a TCP connection or UDP transmission.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
* @param remot_info **pcon_info : connect to client info
|
||||
* @param uint8 typeflags : 0, regular server; 1, ssl server
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding transmission according to
|
||||
* structure espconn
|
||||
*/
|
||||
sint8 espconn_get_connection_info(struct espconn *pespconn, remot_info **pcon_info, uint8 typeflags);
|
||||
|
||||
/**
|
||||
* @brief Register data sent callback which will be called back when data are successfully sent.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
* @param espconn_sent_callback sent_cb : registered callback function which will be called if
|
||||
* the data is successfully sent
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding transmission according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_sentcb(struct espconn *espconn, espconn_sent_callback sent_cb);
|
||||
|
||||
/**
|
||||
* @brief Register a callback which will be called when all sending TCP data is completely
|
||||
* write into write-buffer or sent.
|
||||
*
|
||||
* Need to call espconn_set_opt to enable write-buffer first.
|
||||
*
|
||||
* @attention 1. write-buffer is used to keep TCP data that waiting to be sent, queue number
|
||||
* of the write-buffer is 8 which means that it can keep 8 packets at most.
|
||||
* The size of write-buffer is 2920 bytes.
|
||||
* @attention 2. Users can enable it by using espconn_set_opt.
|
||||
* @attention 3. Users can call espconn_send to send the next packet in write_finish_callback
|
||||
* instead of using espconn_sent_callback.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
* @param espconn_connect_callback write_finish_fn : registered callback function which will
|
||||
* be called if the data is completely write
|
||||
* into write buffer or sent.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_write_finish(struct espconn *espconn, espconn_connect_callback write_finish_fn);
|
||||
|
||||
/**
|
||||
* @brief Send data through network.
|
||||
*
|
||||
* @attention 1. Please call espconn_send after espconn_sent_callback of the pre-packet.
|
||||
* @attention 2. If it is a UDP transmission, it is suggested to set espconn->proto.udp->remote_ip
|
||||
* and remote_port before every calling of espconn_send.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
* @param uint8 *psent : pointer of data
|
||||
* @param uint16 length : data length
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding network transmission
|
||||
* according to structure espconn
|
||||
* - ESPCONN_MAXNUM - buffer of sending data is full
|
||||
* - ESPCONN_IF - send UDP data fail
|
||||
*/
|
||||
sint8 espconn_send(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
/**
|
||||
* @brief Send data through network.
|
||||
*
|
||||
* This API is deprecated, please use espconn_send instead.
|
||||
*
|
||||
* @attention 1. Please call espconn_sent after espconn_sent_callback of the pre-packet.
|
||||
* @attention 2. If it is a UDP transmission, it is suggested to set espconn->proto.udp->remote_ip
|
||||
* and remote_port before every calling of espconn_sent.
|
||||
*
|
||||
* @param struct espconn *espconn : the network connection structure
|
||||
* @param uint8 *psent : pointer of data
|
||||
* @param uint16 length : data length
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding network transmission
|
||||
* according to structure espconn
|
||||
* - ESPCONN_MAXNUM - buffer of sending data is full
|
||||
* - ESPCONN_IF - send UDP data fail
|
||||
*/
|
||||
sint8 espconn_sent(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
/**
|
||||
* @brief Send UDP data.
|
||||
*
|
||||
* @param struct espconn *espconn : the UDP structure
|
||||
* @param uint8 *psent : pointer of data
|
||||
* @param uint16 length : data length
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
* - ESPCONN_MAXNUM - buffer of sending data is full
|
||||
* - ESPCONN_IF - send UDP data fail
|
||||
*/
|
||||
sint16 espconn_sendto(struct espconn *espconn, uint8 *psent, uint16 length);
|
||||
|
||||
/**
|
||||
* @brief Register connection function which will be called back under successful TCP connection.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param espconn_connect_callback connect_cb : registered callback function
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_connectcb(struct espconn *espconn, espconn_connect_callback connect_cb);
|
||||
|
||||
/**
|
||||
* @brief register data receive function which will be called back when data are received.
|
||||
*
|
||||
* @param struct espconn *espconn : the network transmission structure
|
||||
* @param espconn_recv_callback recv_cb : registered callback function
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_recvcb(struct espconn *espconn, espconn_recv_callback recv_cb);
|
||||
|
||||
/**
|
||||
* @brief Register reconnect callback.
|
||||
*
|
||||
* @attention espconn_reconnect_callback is more like a network-broken error handler; it handles
|
||||
* errors that occurs in any phase of the connection.
|
||||
* For instance, if espconn_send fails, espconn_reconnect_callback will be called
|
||||
* because the network is broken.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param espconn_reconnect_callback recon_cb : registered callback function
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_reconcb(struct espconn *espconn, espconn_reconnect_callback recon_cb);
|
||||
|
||||
/**
|
||||
* @brief Register disconnection function which will be called back under successful TCP
|
||||
* disconnection.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param espconn_connect_callback discon_cb : registered callback function
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_regist_disconcb(struct espconn *espconn, espconn_connect_callback discon_cb);
|
||||
|
||||
/**
|
||||
* @brief Get an available port for network.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return Port number.
|
||||
*/
|
||||
uint32 espconn_port(void);
|
||||
|
||||
/**
|
||||
* @brief Set option of TCP connection.
|
||||
*
|
||||
* @attention In general, we need not call this API. If call espconn_set_opt, please call
|
||||
* it in espconn_connect_callback.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param uint8 opt : option of TCP connection, refer to enum espconn_option
|
||||
* - bit 0: 1: free memory after TCP disconnection happen need not wait 2 minutes;
|
||||
* - bit 1: 1: disable nagle algorithm during TCP data transmission, quiken the data transmission.
|
||||
* - bit 2: 1: enable espconn_regist_write_finish, enter write finish callback means
|
||||
* the data espconn_send sending was written into 2920 bytes write-buffer
|
||||
* waiting for sending or already sent.
|
||||
* - bit 3: 1: enable TCP keep alive
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_set_opt(struct espconn *espconn, uint8 opt);
|
||||
|
||||
/**
|
||||
* @brief Clear option of TCP connection.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param uint8 opt : enum espconn_option
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_clear_opt(struct espconn *espconn, uint8 opt);
|
||||
|
||||
/**
|
||||
* @brief Set configuration of TCP keep alive.
|
||||
*
|
||||
* @attention In general, we need not call this API. If needed, please call it in
|
||||
* espconn_connect_callback and call espconn_set_opt to enable keep alive first.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param uint8 level : To do TCP keep-alive detection every ESPCONN_KEEPIDLE. If there
|
||||
* is no response, retry ESPCONN_KEEPCNT times every ESPCONN_KEEPINTVL.
|
||||
* If still no response, considers it as TCP connection broke, goes
|
||||
* into espconn_reconnect_callback. Notice, keep alive interval is not
|
||||
* precise, only for reference, it depends on priority.
|
||||
* @param void* optarg : value of parameter
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_set_keepalive(struct espconn *espconn, uint8 level, void *optarg);
|
||||
|
||||
/**
|
||||
* @brief Get configuration of TCP keep alive.
|
||||
*
|
||||
* @param struct espconn *espconn : the TCP connection structure
|
||||
* @param uint8 level : enum espconn_level
|
||||
* @param void* optarg : value of parameter
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection according
|
||||
* to structure espconn
|
||||
*/
|
||||
sint8 espconn_get_keepalive(struct espconn *espconn, uint8 level, void *optarg);
|
||||
|
||||
/**
|
||||
* @brief Callback which is invoked when a hostname is found.
|
||||
*
|
||||
* @param const char *name : hostname
|
||||
* @param ip_addr_t *ipaddr : IP address of the hostname, or to be NULL if the name could
|
||||
* not be found (or on any other error).
|
||||
* @param void *callback_arg : callback argument.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);
|
||||
|
||||
/**
|
||||
* @brief DNS function.
|
||||
*
|
||||
* Parse a hostname (string) to an IP address.
|
||||
*
|
||||
* @param struct espconn *pespconn : espconn to parse a hostname.
|
||||
* @param const char *hostname : the hostname.
|
||||
* @param ip_addr_t *addr : IP address.
|
||||
* @param dns_found_callback found : callback of DNS
|
||||
*
|
||||
* @return err_t :
|
||||
* - ESPCONN_OK - succeed
|
||||
* - ESPCONN_INPROGRESS - error code : already connected
|
||||
* - ESPCONN_ARG - error code : illegal argument, can't find network transmission
|
||||
* according to structure espconn
|
||||
*/
|
||||
err_t espconn_gethostbyname(struct espconn *pespconn, const char *hostname, ip_addr_t *addr, dns_found_callback found);
|
||||
|
||||
/**
|
||||
* @brief Join a multicast group.
|
||||
*
|
||||
* @attention This API can only be called after the ESP8266 station connects to a router.
|
||||
*
|
||||
* @param ip_addr_t *host_ip : IP of UDP host
|
||||
* @param ip_addr_t *multicast_ip : IP of multicast group
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
*/
|
||||
sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
|
||||
|
||||
/**
|
||||
* @brief Leave a multicast group.
|
||||
*
|
||||
* @attention This API can only be called after the ESP8266 station connects to a router.
|
||||
*
|
||||
* @param ip_addr_t *host_ip : IP of UDP host
|
||||
* @param ip_addr_t *multicast_ip : IP of multicast group
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_MEM - Out of memory
|
||||
*/
|
||||
sint8 espconn_igmp_leave(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
|
||||
|
||||
/**
|
||||
* @brief Puts in a request to block the TCP receive function.
|
||||
*
|
||||
* @attention The function does not act immediately; we recommend calling it while
|
||||
* reserving 5*1460 bytes of memory. This API can be called more than once.
|
||||
*
|
||||
* @param struct espconn *espconn : corresponding TCP connection structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn.
|
||||
*/
|
||||
sint8 espconn_recv_hold(struct espconn *pespconn);
|
||||
|
||||
/**
|
||||
* @brief Unblock TCP receiving data (i.e. undo espconn_recv_hold).
|
||||
*
|
||||
* @attention This API takes effect immediately.
|
||||
*
|
||||
* @param struct espconn *espconn : corresponding TCP connection structure
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : error code
|
||||
* - ESPCONN_ARG - illegal argument, can't find the corresponding TCP connection
|
||||
* according to structure espconn.
|
||||
*/
|
||||
sint8 espconn_recv_unhold(struct espconn *pespconn);
|
||||
|
||||
/**
|
||||
* @brief Set default DNS server. Two DNS server is allowed to be set.
|
||||
*
|
||||
* @attention Only if ESP8266 DHCP client is disabled (wifi_station_dhcpc_stop),
|
||||
* this API can be used.
|
||||
*
|
||||
* @param char numdns : DNS server ID, 0 or 1
|
||||
* @param ip_addr_t *dnsserver : DNS server IP
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void espconn_dns_setserver(char numdns, ip_addr_t *dnsserver);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
351
components/esp8266/include/espressif/espnow.h
Normal file
351
components/esp8266/include/espressif/espnow.h
Normal file
@ -0,0 +1,351 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESPNOW_H__
|
||||
#define __ESPNOW_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup ESPNow_APIs ESP-NOW APIs
|
||||
* @brief ESP-NOW APIs
|
||||
*
|
||||
* @attention 1. ESP-NOW do not support broadcast and multicast.
|
||||
* @attention 2. ESP-NOW is targeted to Smart-Light project, so it is suggested
|
||||
* that slave role corresponding to soft-AP or soft-AP+station mode,
|
||||
* controller role corresponding to station mode.
|
||||
* @attention 3. When ESP8266 is in soft-AP+station mode, it will communicate through
|
||||
* station interface if it is in slave role, and communicate through
|
||||
* soft-AP interface if it is in controller role.
|
||||
* @attention 4. ESP-NOW can not wake ESP8266 up from sleep, so if the target ESP8266
|
||||
* station is in sleep, ESP-NOW communication will fail.
|
||||
* @attention 5. In station mode, ESP8266 supports 10 encrypt ESP-NOW peers at most,
|
||||
* with the unencrypted peers, it can be 20 peers in total at most.
|
||||
* @attention 6. In the soft-AP mode or soft-AP + station mode, the ESP8266 supports
|
||||
* 6 encrypt ESP-NOW peers at most, with the unencrypted peers, it can
|
||||
* be 20 peers in total at most.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup ESPNow_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
enum esp_now_role {
|
||||
ESP_NOW_ROLE_IDLE = 0,
|
||||
ESP_NOW_ROLE_CONTROLLER,
|
||||
ESP_NOW_ROLE_SLAVE,
|
||||
ESP_NOW_ROLE_MAX,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief ESP-NOW send callback.
|
||||
*
|
||||
* @attention The status will be OK, if ESP-NOW send packet successfully. But users
|
||||
* need to make sure by themselves that key of communication is correct.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device
|
||||
* @param uint8 *data : data received
|
||||
* @param uint8 len : data length
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*esp_now_recv_cb_t)(uint8 *mac_addr, uint8 *data, uint8 len);
|
||||
|
||||
/**
|
||||
* @brief ESP-NOW send callback.
|
||||
*
|
||||
* @attention The status will be OK, if ESP-NOW send packet successfully. But users
|
||||
* need to make sure by themselves that key of communication is correct.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device
|
||||
* @param uint8 status : status of ESP-NOW sending packet, 0, OK; 1, fail.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*esp_now_send_cb_t)(uint8 *mac_addr, uint8 status);
|
||||
|
||||
/**
|
||||
* @brief ESP-NOW initialization.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_init(void);
|
||||
|
||||
/**
|
||||
* @brief Deinitialize ESP-NOW.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_deinit(void);
|
||||
|
||||
/**
|
||||
* @brief Register ESP-NOW send callback.
|
||||
*
|
||||
* @param esp_now_send_cb_t cb : send callback
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_register_send_cb(esp_now_send_cb_t cb);
|
||||
|
||||
/**
|
||||
* @brief Unregister ESP-NOW send callback.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_unregister_send_cb(void);
|
||||
|
||||
/**
|
||||
* @brief Register ESP-NOW receive callback.
|
||||
*
|
||||
* @param esp_now_recv_cb_t cb : receive callback
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_register_recv_cb(esp_now_recv_cb_t cb);
|
||||
|
||||
/**
|
||||
* @brief Unregister ESP-NOW receive callback.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_unregister_recv_cb(void);
|
||||
|
||||
/**
|
||||
* @brief Send ESP-NOW packet.
|
||||
*
|
||||
* @param uint8 *da : destination MAC address.
|
||||
* If it's NULL, send packet to all MAC addresses recorded
|
||||
* by ESP-NOW; otherwise, send packet to target MAC address.
|
||||
* @param uint8 *data : data need to send
|
||||
* @param uint8 len : data length
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_send(uint8 *da, uint8 *data, uint8 len);
|
||||
|
||||
/**
|
||||
* @brief Add an ESP-NOW peer, store MAC address of target device into ESP-NOW MAC list.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of device
|
||||
* @param uint8 role : role type of device, enum esp_now_role
|
||||
* @param uint8 channel : channel of device
|
||||
* @param uint8 *key : 16 bytes key which is needed for ESP-NOW communication
|
||||
* @param uint8 key_len : length of key, has to be 16 bytes now
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_add_peer(uint8 *mac_addr, uint8 role, uint8 channel, uint8 *key, uint8 key_len);
|
||||
|
||||
/**
|
||||
* @brief Delete an ESP-NOW peer, delete MAC address of the device from ESP-NOW MAC list.
|
||||
*
|
||||
* @param u8 *mac_addr : MAC address of device
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_del_peer(uint8 *mac_addr);
|
||||
|
||||
/**
|
||||
* @brief Set ESP-NOW role of device itself.
|
||||
*
|
||||
* @param uint8 role : role type of device, enum esp_now_role.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_set_self_role(uint8 role);
|
||||
|
||||
/**
|
||||
* @brief Get ESP-NOW role of device itself.
|
||||
*
|
||||
* @param uint8 role : role type of device, enum esp_now_role.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_get_self_role(void);
|
||||
|
||||
/**
|
||||
* @brief Set ESP-NOW role for a target device. If it is set multiple times,
|
||||
* new role will cover the old one.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of device.
|
||||
* @param uint8 role : role type, enum esp_now_role.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_set_peer_role(uint8 *mac_addr, uint8 role);
|
||||
|
||||
/**
|
||||
* @brief Get ESP-NOW role of a target device.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of device.
|
||||
*
|
||||
* @return ESP_NOW_ROLE_CONTROLLER, role type : controller
|
||||
* @return ESP_NOW_ROLE_SLAVE, role type : slave
|
||||
* @return otherwise : fail
|
||||
*/
|
||||
sint32 esp_now_get_peer_role(uint8 *mac_addr);
|
||||
|
||||
/**
|
||||
* @brief Record channel information of a ESP-NOW device.
|
||||
*
|
||||
* When communicate with this device,
|
||||
* - call esp_now_get_peer_channel to get its channel first,
|
||||
* - then call wifi_set_channel to be in the same channel and do communication.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device.
|
||||
* @param uint8 channel : channel, usually to be 1 ~ 13, some area may use channel 14.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_set_peer_channel(uint8 *mac_addr, uint8 channel);
|
||||
|
||||
/**
|
||||
* @brief Get channel information of a ESP-NOW device.
|
||||
*
|
||||
* @attention ESP-NOW communication needs to be at the same channel.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device.
|
||||
*
|
||||
* @return 1 ~ 13 (some area may get 14) : channel number
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_get_peer_channel(uint8 *mac_addr);
|
||||
|
||||
/**
|
||||
* @brief Set ESP-NOW key for a target device.
|
||||
*
|
||||
* If it is set multiple times, new key will cover the old one.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device.
|
||||
* @param uint8 *key : 16 bytes key which is needed for ESP-NOW communication,
|
||||
* if it is NULL, current key will be reset to be none.
|
||||
* @param uint8 key_len : key length, has to be 16 bytes now
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_set_peer_key(uint8 *mac_addr, uint8 *key, uint8 key_len);
|
||||
|
||||
/**
|
||||
* @brief Get ESP-NOW key of a target device.
|
||||
*
|
||||
* If it is set multiple times, new key will cover the old one.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device.
|
||||
* @param uint8 *key : pointer of key, buffer size has to be 16 bytes at least
|
||||
* @param uint8 key_len : key length
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return > 0 : find target device but can't get key
|
||||
* @return < 0 : fail
|
||||
*/
|
||||
sint32 esp_now_get_peer_key(uint8 *mac_addr, uint8 *key, uint8 *key_len);
|
||||
|
||||
/**
|
||||
* @brief Get MAC address of ESP-NOW device.
|
||||
*
|
||||
* Get MAC address of ESP-NOW device which is pointed now, and move
|
||||
* the pointer to next one in ESP-NOW MAC list or move the pointer to
|
||||
* the first one in ESP-NOW MAC list.
|
||||
*
|
||||
* @attention 1. This API can not re-entry
|
||||
* @attention 2. Parameter has to be true when you call it the first time.
|
||||
*
|
||||
* @param bool restart : true, move pointer to the first one in ESP-NOW MAC list;
|
||||
* false, move pointer to the next one in ESP-NOW MAC list
|
||||
*
|
||||
* @return NULL, no ESP-NOW devices exist
|
||||
* @return Otherwise, MAC address of ESP-NOW device which is pointed now
|
||||
*/
|
||||
uint8 *esp_now_fetch_peer(bool restart);
|
||||
|
||||
/**
|
||||
* @brief Check if target device exists or not.
|
||||
*
|
||||
* @param uint8 *mac_addr : MAC address of target device.
|
||||
*
|
||||
* @return 0 : device does not exist
|
||||
* @return < 0 : error occur, check fail
|
||||
* @return > 0 : device exists
|
||||
*/
|
||||
sint32 esp_now_is_peer_exist(uint8 *mac_addr);
|
||||
|
||||
/**
|
||||
* @brief Get the total number of ESP-NOW devices which are associated, and the
|
||||
* number count of encrypted devices.
|
||||
*
|
||||
* @param uint8 *all_cnt : total number of ESP-NOW devices which are associated.
|
||||
* @param uint8 *encryp_cnt : number count of encrypted devices
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_get_cnt_info(uint8 *all_cnt, uint8 *encrypt_cnt);
|
||||
|
||||
/**
|
||||
* @brief Set the encrypt key of communication key.
|
||||
*
|
||||
* All ESP-NOW devices share the same encrypt key. If users do not set
|
||||
* the encrypt key, ESP-NOW communication key will be encrypted by a default key.
|
||||
*
|
||||
* @param uint8 *key : pointer of encrypt key.
|
||||
* @param uint8 len : key length, has to be 16 bytes now.
|
||||
*
|
||||
* @return 0 : succeed
|
||||
* @return Non-0 : fail
|
||||
*/
|
||||
sint32 esp_now_set_kok(uint8 *key, uint8 len);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
142
components/esp8266/include/espressif/pwm.h
Normal file
142
components/esp8266/include/espressif/pwm.h
Normal file
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __PWM_H__
|
||||
#define __PWM_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup Driver_APIs Driver APIs
|
||||
* @brief Driver APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup Driver_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup PWM_Driver_APIs PWM Driver APIs
|
||||
* @brief PWM driver APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup PWM_Driver_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
struct pwm_param {
|
||||
uint32 period; /**< PWM period */
|
||||
uint32 freq; /**< PWM frequency */
|
||||
uint32 duty[8]; /**< PWM duty */
|
||||
};
|
||||
|
||||
#define PWM_DEPTH 1023
|
||||
|
||||
/**
|
||||
* @brief PWM function initialization, including GPIO, frequency and duty cycle.
|
||||
*
|
||||
* @attention This API can be called only once.
|
||||
*
|
||||
* @param uint32 period : pwm frequency
|
||||
* @param uint32 *duty : duty cycle
|
||||
* @param uint32 pwm_channel_num : PWM channel number
|
||||
* @param uint32 (*pin_info_list)[3] : GPIO parameter of PWM channel, it is a pointer
|
||||
* of n x 3 array which defines GPIO register, IO
|
||||
* reuse of corresponding pin and GPIO number.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void pwm_init(uint32 period, uint32 *duty, uint32 pwm_channel_num, uint32(*pin_info_list)[3]);
|
||||
|
||||
/**
|
||||
* @brief Set the duty cycle of a PWM channel.
|
||||
*
|
||||
* Set the time that high level signal will last, duty depends on period,
|
||||
* the maximum value can be 1023.
|
||||
*
|
||||
*
|
||||
* @attention After set configuration, pwm_start needs to be called to take effect.
|
||||
*
|
||||
* @param uint32 duty : duty cycle
|
||||
* @param uint8 channel : PWM channel number
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void pwm_set_duty(uint32 duty, uint8 channel);
|
||||
|
||||
/**
|
||||
* @brief Get the duty cycle of a PWM channel.
|
||||
*
|
||||
* @param uint8 channel : PWM channel number
|
||||
*
|
||||
* @return Duty cycle of PWM output.
|
||||
*/
|
||||
uint32 pwm_get_duty(uint8 channel);
|
||||
|
||||
/**
|
||||
* @brief Set PWM period, unit : us.
|
||||
*
|
||||
* For example, for 1KHz PWM, period is 1000 us.
|
||||
*
|
||||
* @attention After set configuration, pwm_start needs to be called to take effect.
|
||||
*
|
||||
* @param uint32 period : PWM period, unit : us.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void pwm_set_period(uint32 period);
|
||||
|
||||
/**
|
||||
* @brief Get PWM period, unit : us.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return PWM period, unit : us.
|
||||
*/
|
||||
uint32 pwm_get_period(void);
|
||||
|
||||
/**
|
||||
* @brief Starts PWM.
|
||||
*
|
||||
* @attention This function needs to be called after PWM configuration is changed.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void pwm_start(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
236
components/esp8266/include/espressif/queue.h
Normal file
236
components/esp8266/include/espressif/queue.h
Normal file
@ -0,0 +1,236 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _SYS_QUEUE_H_
|
||||
#define _SYS_QUEUE_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define QMD_SAVELINK(name, link)
|
||||
#define TRASHIT(x)
|
||||
|
||||
/*
|
||||
* Singly-linked List declarations.
|
||||
*/
|
||||
#define SLIST_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *slh_first; /* first element */ \
|
||||
}
|
||||
|
||||
#define SLIST_HEAD_INITIALIZER(head) \
|
||||
{ NULL }
|
||||
|
||||
#define SLIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *sle_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked List functions.
|
||||
*/
|
||||
#define SLIST_EMPTY(head) ((head)->slh_first == NULL)
|
||||
|
||||
#define SLIST_FIRST(head) ((head)->slh_first)
|
||||
|
||||
#define SLIST_FOREACH(var, head, field) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = SLIST_FIRST((head)); \
|
||||
(var) && ((tvar) = SLIST_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
|
||||
for ((varp) = &SLIST_FIRST((head)); \
|
||||
((var) = *(varp)) != NULL; \
|
||||
(varp) = &SLIST_NEXT((var), field))
|
||||
|
||||
#define SLIST_INIT(head) do { \
|
||||
SLIST_FIRST((head)) = NULL; \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \
|
||||
SLIST_NEXT((slistelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_INSERT_HEAD(head, elm, field) do { \
|
||||
SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \
|
||||
SLIST_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
|
||||
|
||||
#define SLIST_REMOVE(head, elm, type, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
|
||||
if (SLIST_FIRST((head)) == (elm)) { \
|
||||
SLIST_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
struct type *curelm = SLIST_FIRST((head)); \
|
||||
while (SLIST_NEXT(curelm, field) != (elm)) \
|
||||
curelm = SLIST_NEXT(curelm, field); \
|
||||
SLIST_REMOVE_AFTER(curelm, field); \
|
||||
} \
|
||||
TRASHIT(*oldnext); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_AFTER(elm, field) do { \
|
||||
SLIST_NEXT(elm, field) = \
|
||||
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
|
||||
} while (0)
|
||||
|
||||
#define SLIST_REMOVE_HEAD(head, field) do { \
|
||||
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue declarations.
|
||||
*/
|
||||
#define STAILQ_HEAD(name, type) \
|
||||
struct name { \
|
||||
struct type *stqh_first; /* first element */ \
|
||||
struct type **stqh_last; /* addr of last next element */ \
|
||||
}
|
||||
|
||||
#define STAILQ_HEAD_INITIALIZER(head) \
|
||||
{ NULL, &(head).stqh_first }
|
||||
|
||||
#define STAILQ_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *stqe_next; /* next element */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* Singly-linked Tail queue functions.
|
||||
*/
|
||||
#define STAILQ_CONCAT(head1, head2) do { \
|
||||
if (!STAILQ_EMPTY((head2))) { \
|
||||
*(head1)->stqh_last = (head2)->stqh_first; \
|
||||
(head1)->stqh_last = (head2)->stqh_last; \
|
||||
STAILQ_INIT((head2)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_EMPTY(head) ((head)->stqh_first == NULL)
|
||||
|
||||
#define STAILQ_FIRST(head) ((head)->stqh_first)
|
||||
|
||||
#define STAILQ_FOREACH(var, head, field) \
|
||||
for((var) = STAILQ_FIRST((head)); \
|
||||
(var); \
|
||||
(var) = STAILQ_NEXT((var), field))
|
||||
|
||||
|
||||
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||
for ((var) = STAILQ_FIRST((head)); \
|
||||
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
|
||||
(var) = (tvar))
|
||||
|
||||
#define STAILQ_INIT(head) do { \
|
||||
STAILQ_FIRST((head)) = NULL; \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_NEXT((tqelm), field) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_HEAD(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
STAILQ_FIRST((head)) = (elm); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_TAIL(head, elm, field) do { \
|
||||
STAILQ_NEXT((elm), field) = NULL; \
|
||||
*(head)->stqh_last = (elm); \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_LAST(head, type, field) \
|
||||
(STAILQ_EMPTY((head))? \
|
||||
NULL : \
|
||||
((struct type *)(void *)\
|
||||
((char *)((head)->stqh_last) - __offsetof(struct type, field))))
|
||||
|
||||
#define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next)
|
||||
|
||||
#define STAILQ_REMOVE(head, elm, type, field) do { \
|
||||
QMD_SAVELINK(oldnext, (elm)->field.stqe_next); \
|
||||
if (STAILQ_FIRST((head)) == (elm)) { \
|
||||
STAILQ_REMOVE_HEAD((head), field); \
|
||||
} \
|
||||
else { \
|
||||
struct type *curelm = STAILQ_FIRST((head)); \
|
||||
while (STAILQ_NEXT(curelm, field) != (elm)) \
|
||||
curelm = STAILQ_NEXT(curelm, field); \
|
||||
STAILQ_REMOVE_AFTER(head, curelm, field); \
|
||||
} \
|
||||
TRASHIT(*oldnext); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_HEAD(head, field) do { \
|
||||
if ((STAILQ_FIRST((head)) = \
|
||||
STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_FIRST((head)); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_REMOVE_AFTER(head, elm, field) do { \
|
||||
if ((STAILQ_NEXT(elm, field) = \
|
||||
STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \
|
||||
(head)->stqh_last = &STAILQ_NEXT((elm), field); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_SWAP(head1, head2, type) do { \
|
||||
struct type *swap_first = STAILQ_FIRST(head1); \
|
||||
struct type **swap_last = (head1)->stqh_last; \
|
||||
STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \
|
||||
(head1)->stqh_last = (head2)->stqh_last; \
|
||||
STAILQ_FIRST(head2) = swap_first; \
|
||||
(head2)->stqh_last = swap_last; \
|
||||
if (STAILQ_EMPTY(head1)) \
|
||||
(head1)->stqh_last = &STAILQ_FIRST(head1); \
|
||||
if (STAILQ_EMPTY(head2)) \
|
||||
(head2)->stqh_last = &STAILQ_FIRST(head2); \
|
||||
} while (0)
|
||||
|
||||
#define STAILQ_INSERT_CHAIN_HEAD(head, elm_chead, elm_ctail, field) do { \
|
||||
if ((STAILQ_NEXT(elm_ctail, field) = STAILQ_FIRST(head)) == NULL ) { \
|
||||
(head)->stqh_last = &STAILQ_NEXT(elm_ctail, field); \
|
||||
} \
|
||||
STAILQ_FIRST(head) = (elm_chead); \
|
||||
} while (0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !_SYS_QUEUE_H_ */
|
165
components/esp8266/include/espressif/smartconfig.h
Normal file
165
components/esp8266/include/espressif/smartconfig.h
Normal file
@ -0,0 +1,165 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SMARTCONFIG_H__
|
||||
#define __SMARTCONFIG_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup WiFi_APIs WiFi Related APIs
|
||||
* @brief WiFi APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup WiFi_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup Smartconfig_APIs Smartconfig APIs
|
||||
* @brief SmartConfig APIs
|
||||
*
|
||||
* SmartConfig can only be enabled in station only mode.
|
||||
* Please make sure the target AP is enabled before enable SmartConfig.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @addtogroup Smartconfig_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
SC_STATUS_WAIT = 0, /**< waiting, do not start connection in this phase */
|
||||
SC_STATUS_FIND_CHANNEL, /**< find target channel, start connection by APP in this phase */
|
||||
SC_STATUS_GETTING_SSID_PSWD, /**< getting SSID and password of target AP */
|
||||
SC_STATUS_LINK, /**< connecting to target AP */
|
||||
SC_STATUS_LINK_OVER, /**< got IP, connect to AP successfully */
|
||||
} sc_status;
|
||||
|
||||
typedef enum {
|
||||
SC_TYPE_ESPTOUCH = 0, /**< protocol: ESPTouch */
|
||||
SC_TYPE_AIRKISS, /**< protocol: AirKiss */
|
||||
SC_TYPE_ESPTOUCH_AIRKISS, /**< protocol: ESPTouch and AirKiss */
|
||||
} sc_type;
|
||||
|
||||
/**
|
||||
* @brief The callback of SmartConfig, executed when smart-config status changed.
|
||||
*
|
||||
* @param sc_status status : status of SmartConfig:
|
||||
* - if status == SC_STATUS_GETTING_SSID_PSWD, parameter void *pdata is a pointer
|
||||
of sc_type, means SmartConfig type: AirKiss or ESP-TOUCH.
|
||||
* - if status == SC_STATUS_LINK, parameter void *pdata is a pointer of struct station_config;
|
||||
* - if status == SC_STATUS_LINK_OVER, parameter void *pdata is a pointer of mobile
|
||||
* phone's IP address, 4 bytes. This is only available in ESPTOUCH, otherwise,
|
||||
* it is NULL.
|
||||
* - otherwise, parameter void *pdata is NULL.
|
||||
* @param void *pdata : data of SmartConfig
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*sc_callback_t)(sc_status status, void *pdata);
|
||||
|
||||
/**
|
||||
* @brief Get the version of SmartConfig.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return SmartConfig version
|
||||
*/
|
||||
const char *smartconfig_get_version(void);
|
||||
|
||||
/**
|
||||
* @brief Start SmartConfig mode.
|
||||
*
|
||||
* Start SmartConfig mode, to connect ESP8266 station to AP, by sniffing
|
||||
* for special packets from the air, containing SSID and password of desired AP.
|
||||
* You need to broadcast the SSID and password (e.g. from mobile device or computer)
|
||||
* with the SSID and password encoded.
|
||||
*
|
||||
* @attention 1. This api can only be called in station mode.
|
||||
* @attention 2. During SmartConfig, ESP8266 station and soft-AP are disabled.
|
||||
* @attention 3. Can not call smartconfig_start twice before it finish, please call
|
||||
* smartconfig_stop first.
|
||||
* @attention 4. Don't call any other APIs during SmartConfig, please call smartconfig_stop first.
|
||||
*
|
||||
* @param sc_callback_t cb : SmartConfig callback; executed when SmartConfig status changed;
|
||||
* @param uint8 log : 1, UART output logs; otherwise, UART only outputs the result.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool smartconfig_start(sc_callback_t cb, ...);
|
||||
|
||||
/**
|
||||
* @brief Stop SmartConfig, free the buffer taken by smartconfig_start.
|
||||
*
|
||||
* @attention Whether connect to AP succeed or not, this API should be called to free
|
||||
* memory taken by smartconfig_start.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool smartconfig_stop(void);
|
||||
|
||||
/**
|
||||
* @brief Set timeout of SmartConfig.
|
||||
*
|
||||
* @attention SmartConfig timeout start at SC_STATUS_FIND_CHANNEL, SmartConfig will
|
||||
* restart if timeout.
|
||||
*
|
||||
* @param uint8 time_s : range 15s~255s, offset:45s.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool esptouch_set_timeout(uint8 time_s);
|
||||
|
||||
/**
|
||||
* @brief Set protocol type of SmartConfig.
|
||||
*
|
||||
* @attention If users need to set the SmartConfig type, please set it before calling
|
||||
* smartconfig_start.
|
||||
*
|
||||
* @param sc_type type : AirKiss, ESP-TOUCH or both.
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool smartconfig_set_type(sc_type type);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
165
components/esp8266/include/espressif/spi_flash.h
Normal file
165
components/esp8266/include/espressif/spi_flash.h
Normal file
@ -0,0 +1,165 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SPI_FLASH_H__
|
||||
#define __SPI_FLASH_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup Driver_APIs Driver APIs
|
||||
* @brief Driver APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup Driver_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup SPI_Driver_APIs SPI Driver APIs
|
||||
* @brief SPI Flash APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup SPI_Driver_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
SPI_FLASH_RESULT_OK, /**< SPI Flash operating OK */
|
||||
SPI_FLASH_RESULT_ERR, /**< SPI Flash operating fail */
|
||||
SPI_FLASH_RESULT_TIMEOUT /**< SPI Flash operating time out */
|
||||
} SpiFlashOpResult;
|
||||
|
||||
typedef struct{
|
||||
uint32 deviceId;
|
||||
uint32 chip_size; // chip size in byte
|
||||
uint32 block_size;
|
||||
uint32 sector_size;
|
||||
uint32 page_size;
|
||||
uint32 status_mask;
|
||||
} SpiFlashChip;
|
||||
|
||||
#define SPI_FLASH_SEC_SIZE 4096 /**< SPI Flash sector size */
|
||||
|
||||
/**
|
||||
* @brief Get ID info of SPI Flash.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return SPI Flash ID
|
||||
*/
|
||||
uint32 spi_flash_get_id(void);
|
||||
|
||||
/**
|
||||
* @brief Read state register of SPI Flash.
|
||||
*
|
||||
* @param uint32 *status : the read value (pointer) of state register.
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
SpiFlashOpResult spi_flash_read_status(uint32 *status);
|
||||
|
||||
/**
|
||||
* @brief Write state register of SPI Flash.
|
||||
*
|
||||
* @param uint32 status_value : Write state register value.
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
SpiFlashOpResult spi_flash_write_status(uint32 status_value);
|
||||
|
||||
/**
|
||||
* @brief Erase the Flash sector.
|
||||
*
|
||||
* @param uint16 sec : Sector number, the count starts at sector 0, 4KB per sector.
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
SpiFlashOpResult spi_flash_erase_sector(uint16 sec);
|
||||
|
||||
/**
|
||||
* @brief Write data to Flash.
|
||||
*
|
||||
* @param uint32 des_addr : destination address in Flash.
|
||||
* @param uint32 *src_addr : source address of the data.
|
||||
* @param uint32 size : length of data
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
SpiFlashOpResult spi_flash_write(uint32 des_addr, uint32 *src_addr, uint32 size);
|
||||
|
||||
/**
|
||||
* @brief Read data from Flash.
|
||||
*
|
||||
* @param uint32 src_addr : source address of the data.
|
||||
* @param uint32 *des_addr : destination address in Flash.
|
||||
* @param uint32 size : length of data
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
SpiFlashOpResult spi_flash_read(uint32 src_addr, uint32 *des_addr, uint32 size);
|
||||
|
||||
/**
|
||||
* @brief Registered function for spi_flash_set_read_func.
|
||||
*
|
||||
* @attention used for sdk internal, don't need to care about params
|
||||
*
|
||||
* @param SpiFlashChip *spi : spi flash struct pointer.
|
||||
* @param uint32 src_addr : source address of the data.
|
||||
* @param uint32 *des_addr : destination address in Flash.
|
||||
* @param uint32 size : length of data
|
||||
*
|
||||
* @return SpiFlashOpResult
|
||||
*/
|
||||
typedef SpiFlashOpResult (* user_spi_flash_read)(
|
||||
SpiFlashChip *spi,
|
||||
uint32 src_addr,
|
||||
uint32 *des_addr,
|
||||
uint32 size);
|
||||
|
||||
/**
|
||||
* @brief Register user-define SPI flash read API.
|
||||
*
|
||||
* @attention This API can be only used in SPI overlap mode, please refer to ESP8266_RTOS_SDK
|
||||
* \examples\driver_lib\driver\spi_overlap.c
|
||||
*
|
||||
* @param user_spi_flash_read read : user-define SPI flash read API .
|
||||
*
|
||||
* @return none
|
||||
*/
|
||||
void spi_flash_set_read_func(user_spi_flash_read read);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
149
components/esp8266/include/espressif/upgrade.h
Normal file
149
components/esp8266/include/espressif/upgrade.h
Normal file
@ -0,0 +1,149 @@
|
||||
/*
|
||||
* ESPRSSIF MIT License
|
||||
*
|
||||
* Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
*
|
||||
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
* it is free of charge, to any person obtaining a copy of this software and associated
|
||||
* documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
|
||||
* to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or
|
||||
* substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __UPGRADE_H__
|
||||
#define __UPGRADE_H__
|
||||
|
||||
#include "lwip/sockets.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \defgroup System_APIs System APIs
|
||||
* @brief System APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup System_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
/** \defgroup Upgrade_APIs Upgrade APIs
|
||||
* @brief Firmware upgrade (FOTA) APIs
|
||||
*/
|
||||
|
||||
/** @addtogroup Upgrade_APIs
|
||||
* @{
|
||||
*/
|
||||
|
||||
#define SPI_FLASH_SEC_SIZE 4096 /**< SPI Flash sector size */
|
||||
|
||||
#define USER_BIN1 0x00 /**< firmware, user1.bin */
|
||||
#define USER_BIN2 0x01 /**< firmware, user2.bin */
|
||||
|
||||
#define UPGRADE_FLAG_IDLE 0x00 /**< flag of upgrading firmware, idle */
|
||||
#define UPGRADE_FLAG_START 0x01 /**< flag of upgrading firmware, start upgrade */
|
||||
#define UPGRADE_FLAG_FINISH 0x02 /**< flag of upgrading firmware, finish upgrading */
|
||||
|
||||
#define UPGRADE_FW_BIN1 0x00 /**< firmware, user1.bin */
|
||||
#define UPGRADE_FW_BIN2 0x01 /**< firmware, user2.bin */
|
||||
|
||||
/**
|
||||
* @brief Callback of upgrading firmware through WiFi.
|
||||
*
|
||||
* @param void * arg : information about upgrading server
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
typedef void (*upgrade_states_check_callback)(void *arg);
|
||||
|
||||
//#define UPGRADE_SSL_ENABLE
|
||||
|
||||
struct upgrade_server_info {
|
||||
struct sockaddr_in sockaddrin; /**< socket of upgrading */
|
||||
upgrade_states_check_callback check_cb; /**< callback of upgrading */
|
||||
uint32 check_times; /**< time out of upgrading, unit : ms */
|
||||
uint8 pre_version[16]; /**< previous version of firmware */
|
||||
uint8 upgrade_version[16]; /**< the new version of firmware */
|
||||
uint8 *url; /**< the url of upgrading server */
|
||||
void *pclient_param;
|
||||
uint8 upgrade_flag; /**< true, upgrade succeed; false, upgrade fail */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Upgrade function initialization.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_upgrade_init();
|
||||
|
||||
/**
|
||||
* @brief Upgrade function de-initialization.
|
||||
*
|
||||
* @param null
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
void system_upgrade_deinit();
|
||||
|
||||
/**
|
||||
* @brief Upgrade function de-initialization.
|
||||
*
|
||||
* @param uint8 *data : segment of the firmware bin data
|
||||
* @param uint32 len : length of the segment bin data
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
bool system_upgrade(uint8 *data, uint32 len);
|
||||
|
||||
#ifdef UPGRADE_SSL_ENABLE
|
||||
|
||||
/**
|
||||
* @brief Start upgrade firmware through WiFi with SSL connection.
|
||||
*
|
||||
* @param struct upgrade_server_info *server : the firmware upgrade server info
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
bool system_upgrade_start_ssl(struct upgrade_server_info *server);
|
||||
#else
|
||||
|
||||
/**
|
||||
* @brief Start upgrade firmware through WiFi with normal connection.
|
||||
*
|
||||
* @param struct upgrade_server_info *server : the firmware upgrade server info
|
||||
*
|
||||
* @return true : succeed
|
||||
* @return false : fail
|
||||
*/
|
||||
|
||||
bool system_upgrade_start(struct upgrade_server_info *server);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user