Update and re-organise the sdk internal definitions. (#267)

This commit is contained in:
Our Air Quality 2016-11-14 09:05:13 +11:00 committed by sheinz
parent 2bc87e9414
commit e48910ea3b
9 changed files with 514 additions and 100 deletions

View file

@ -144,7 +144,7 @@ void PendSV(enum SVC_ReqType);
ESPTODO: It may be possible to just read the 'ps' register instead ESPTODO: It may be possible to just read the 'ps' register instead
of accessing thisvariable. of accessing thisvariable.
*/ */
extern char sdk_NMIIrqIsOn; extern uint8_t sdk_NMIIrqIsOn;
extern char level1_int_disabled; extern char level1_int_disabled;
extern unsigned cpu_sr; extern unsigned cpu_sr;

View file

@ -26,8 +26,10 @@
#include "espressif/esp_common.h" #include "espressif/esp_common.h"
#include "espressif/phy_info.h" #include "espressif/phy_info.h"
#include "sdk_internal.h"
#include "esplibs/libmain.h" #include "esplibs/libmain.h"
#include "esplibs/libnet80211.h"
#include "esplibs/libphy.h"
#include "esplibs/libpp.h"
#include "sysparam.h" #include "sysparam.h"
/* This is not declared in any header file (but arguably should be) */ /* This is not declared in any header file (but arguably should be) */
@ -296,11 +298,11 @@ static void init_g_ic(void) {
} }
if (sdk_g_ic.s._unknown1e4._unknown1e4 == 0xffffffff) { if (sdk_g_ic.s._unknown1e4._unknown1e4 == 0xffffffff) {
bzero(&sdk_g_ic.s._unknown1e4, sizeof(sdk_g_ic.s._unknown1e4)); bzero(&sdk_g_ic.s._unknown1e4, sizeof(sdk_g_ic.s._unknown1e4));
bzero(&sdk_g_ic.s._unknown20f, sizeof(sdk_g_ic.s._unknown20f)); bzero(&sdk_g_ic.s.sta_password, sizeof(sdk_g_ic.s.sta_password));
} }
sdk_g_ic.s.wifi_led_enable = 0; sdk_g_ic.s.wifi_led_enable = 0;
if (sdk_g_ic.s._unknown281 > 1) { if (sdk_g_ic.s.sta_bssid_set > 1) {
sdk_g_ic.s._unknown281 = 0; sdk_g_ic.s.sta_bssid_set = 0;
} }
if (sdk_g_ic.s.ap_number > 5) { if (sdk_g_ic.s.ap_number > 5) {
sdk_g_ic.s.ap_number = 1; sdk_g_ic.s.ap_number = 1;
@ -374,9 +376,9 @@ static __attribute__((noinline)) void user_start_phase2(void) {
sdk_sleep_reset_analog_rtcreg_8266(); sdk_sleep_reset_analog_rtcreg_8266();
get_otp_mac_address(sdk_info.sta_mac_addr); get_otp_mac_address(sdk_info.sta_mac_addr);
sdk_wifi_softap_cacl_mac(sdk_info.softap_mac_addr, sdk_info.sta_mac_addr); sdk_wifi_softap_cacl_mac(sdk_info.softap_mac_addr, sdk_info.sta_mac_addr);
sdk_info._unknown0 = 0x0104a8c0; sdk_info.softap_ipaddr.addr = 0x0104a8c0; // 192.168.4.1
sdk_info._unknown4 = 0x00ffffff; sdk_info.softap_netmask.addr = 0x00ffffff; // 255.255.255.0
sdk_info._unknown8 = 0x0104a8c0; sdk_info.softap_gw.addr = 0x0104a8c0; // 192.168.4.1
init_g_ic(); init_g_ic();
read_saved_phy_info(&phy_info); read_saved_phy_info(&phy_info);

View file

@ -14,23 +14,109 @@
// 'info' is declared in app_main.o at .bss+0x4 // 'info' is declared in app_main.o at .bss+0x4
struct sdk_info_st { struct sdk_info_st {
uint32_t _unknown0; // 0x00 ip_addr_t softap_ipaddr; // 0x00
uint32_t _unknown4; // 0x04 ip_addr_t softap_netmask; // 0x04
uint32_t _unknown8; // 0x08 ip_addr_t softap_gw; // 0x08
ip_addr_t ipaddr; // 0x0c ip_addr_t sta_ipaddr; // 0x0c
ip_addr_t netmask; // 0x10 ip_addr_t sta_netmask; // 0x10
ip_addr_t gw; // 0x14 ip_addr_t sta_gw; // 0x14
uint8_t softap_mac_addr[6]; // 0x18 uint8_t softap_mac_addr[6]; // 0x18
uint8_t sta_mac_addr[6]; // 0x1e uint8_t sta_mac_addr[6]; // 0x1e
}; };
extern struct sdk_info_st sdk_info;
// 'rst_if' is declared in user_interface.o at .bss+0xfc struct _unknown_info1 {
extern struct sdk_rst_info sdk_rst_if; uint8_t _unknown00;
uint8_t _unknown01;
uint8_t _unknown02;
uint8_t _unknown03;
uint8_t _unknown04;
uint8_t _unknown05;
uint8_t channel; // eagle_auth_done
};
struct _unknown_softap2 {
uint32_t _unknown00;
uint32_t _unknown04;
uint32_t _unknown08;
uint32_t _unknown0c;
uint32_t _unknown10[8]; // block copied from sdk_g_ic.s._unknown28c
uint32_t _unknown30;
uint32_t _unknown34;
uint32_t *_unknown38;
uint8_t *_unknown3c; // string copied from sdk_g_ic.s._unknown2ac
uint32_t _unknown40[29];
uint32_t _unknownb4; // 300
uint32_t _unknownb8[5];
};
struct _unknown_softap1 {
uint32_t _unknown00;
struct _unknown_softap2 *_unknown04;
uint32_t _unknown08[4];
uint32_t *_unknown18; // result of sdk_wpa_init, dynamically allocated object.
};
struct _unknown_wpa1 {
uint32_t _unknown00; // 1, 2, 3
uint32_t _unknown04; // 2
uint32_t _unknown08; // 10
uint32_t _unknown0c;
uint32_t _unknown10;
uint32_t _unknown14;
uint32_t _unknown18;
uint32_t _unknown1c;
uint32_t _unknown20; // 10
uint32_t _unknown24;
uint32_t _unknown28;
uint32_t _unknown2c;
uint32_t _unknown30;
uint32_t _unknown34;
uint32_t _unknown38;
uint32_t _unknown3c;
uint32_t _unknown40; // 2
uint32_t _unknown44;
uint32_t _unknown48;
};
struct sdk_netif_conninfo {
uint8_t mac_addr[6];
uint8_t _unknown07[2];
uint32_t _unknown08; // eagle_auth_done
uint32_t _unknown0c[3];
int8_t _unknown18; // eagle_auth_done
int8_t _unknown19;
int8_t _unknown1a;
int8_t _unknown1b;
uint32_t _unknown1c[23];
struct _unknown_info1 *_unknown78; // eagle_auth_done
uint32_t _unknown7c[8];
uint16_t _unknown9c; // ieee80211_hostap. increases by one one each timer func called.
uint16_t _unknown9e;
uint32_t _unknowna0[18];
int8_t _unknowne8; //
int8_t _unknowne9; // ppInstallKey
int8_t _unknownea;
int8_t _unknowneb;
uint32_t _unknownec[7];
uint32_t _unknown108; // hostap_handle_timer count
};
// 'g_ic' is declared in libnet80211/ieee80211.o at .bss+0x0
// See also: http://esp8266-re.foogod.com/wiki/G_ic_(IoT_RTOS_SDK_0.9.9)
struct sdk_g_ic_netif_info { struct sdk_g_ic_netif_info {
struct netif *netif; // 0x00 struct netif *netif; // 0x00
@ -38,16 +124,22 @@ struct sdk_g_ic_netif_info {
uint8_t _unknown20[28]; // 0x20 - 0x3c uint8_t _unknown20[28]; // 0x20 - 0x3c
uint32_t _unknown3c; // 0x3c (referenced by sdk_wifi_station_disconnect) uint32_t _unknown3c; // 0x3c (referenced by sdk_wifi_station_disconnect)
uint8_t _unknown40[6]; // 0x40 - 0x46 uint8_t _unknown40[6]; // 0x40 - 0x46
uint8_t _unknown46[66]; // 0x46 - 0x88 uint8_t _unknown46[2]; // 0x46 - 0x47
uint32_t _unknown48; // 0x48
uint8_t _unknown4c; // 0x4c
uint8_t _unknown4d[59]; // 0x4d - 0x88
struct sdk_netif_conninfo *_unknown88; // 0x88 struct sdk_netif_conninfo *_unknown88; // 0x88
uint32_t _unknown8c; // 0x8c uint32_t _unknown8c; // 0x8c
struct sdk_netif_conninfo *conninfo[6]; // 0x90 - 0xa8 struct sdk_netif_conninfo *conninfo[6]; // 0x90 - 0xa8
uint8_t _unknowna8[16]; // 0xa8 - 0xb8 uint8_t _unknowna8[12]; // 0xa8 - 0xb4
uint8_t _unknownb8; // 0xb8 (referenced by sdk_wifi_station_connect / sdk_wifi_station_disconnect) struct _unknown_softap1 *_unknownb4;
uint8_t _unknownb9; // 0xb9 (referenced by sdk_wifi_station_connect / sdk_wifi_station_disconnect) uint8_t statusb8; // 0xb8 (arg of sta_status_set)
uint8_t connect_status; // 0xba (referenced by sdk_system_station_got_ip_set / sdk_wifi_station_disconnect) uint8_t statusb9; // 0xb9 (compared to arg of sta_status_set)
uint8_t connect_status; // 0xba (result of wifi_station_get_connect_status)
uint8_t started; // 0xbb (referenced by sdk_wifi_station_start / sdk_wifi_station_stop)
}; };
// This is the portion of g_ic which is not loaded/saved to the flash ROM, and // This is the portion of g_ic which is not loaded/saved to the flash ROM, and
// starts out zeroed on every boot. // starts out zeroed on every boot.
struct sdk_g_ic_volatile_st { struct sdk_g_ic_volatile_st {
@ -73,9 +165,11 @@ struct sdk_g_ic_volatile_st {
uint8_t _unknown7e; uint8_t _unknown7e;
uint8_t _unknown7f; uint8_t _unknown7f;
uint8_t _unknown80[204]; uint32_t _unknown80;
void *_unknown14c; uint32_t _unknown84[50]; // wifi_softap_start, channels.
void * volatile _unknown14c; // wifi_softap_start, current channel, arg to ieee80211_chan2ieee
uint8_t _unknown150[20]; uint8_t _unknown150[20];
@ -92,8 +186,7 @@ struct sdk_g_ic_volatile_st {
void *_unknown184; void *_unknown184;
struct station_info *station_info_head; struct station_info *station_info_head;
struct station_info *station_info_tail; struct station_info *station_info_tail;
uint32_t _unknown190; void *_unknown190[2]; // cnx_sta_leave
uint32_t _unknown194;
uint8_t _unknown198[40]; uint8_t _unknown198[40];
@ -112,9 +205,11 @@ struct sdk_g_ic_volatile_st {
uint8_t _unknown1d5[3]; uint8_t _unknown1d5[3];
}; };
struct sdk_g_ic_unk0_st { struct sdk_g_ic_unk0_st {
uint32_t _unknown1e4; uint16_t _unknown1e4; // sdk_wpa_config_profile
uint8_t _unknown1e8[32]; uint16_t _unknown1e6; // sdk_wpa_config_profile
uint8_t sta_ssid[32]; // 0x1e8 Station ssid. Null terminated string.
}; };
// This is the portion of g_ic which is loaded/saved to the flash ROM, and thus // This is the portion of g_ic which is loaded/saved to the flash ROM, and thus
@ -127,40 +222,45 @@ struct sdk_g_ic_saved_st {
uint8_t wifi_mode; uint8_t wifi_mode;
uint8_t wifi_led_enable; uint8_t wifi_led_enable;
uint8_t wifi_led_gpio; uint8_t wifi_led_gpio;
uint8_t _unknown1e3; uint8_t wifi_led_state; // 0 or 1.
struct sdk_g_ic_unk0_st _unknown1e4; struct sdk_g_ic_unk0_st _unknown1e4;
uint8_t _unknown208; uint8_t _unknown208;
uint8_t _unknown209; uint8_t _unknown209; // sdk_wpa_config_profile
uint8_t _unknown20a; uint8_t _unknown20a; // sdk_wpa_config_profile
uint8_t _unknown20b; uint8_t _unknown20b;
uint8_t _unknown20c; uint8_t _unknown20c; // sdk_wpa_config_profile
uint8_t _unknown20d; uint8_t _unknown20d;
uint8_t _unknown20e; uint8_t _unknown20e;
uint8_t _unknown20f[64]; uint8_t sta_password[64]; // 0x20f Null terminated string.
uint8_t _unknown24f; uint8_t _unknown24f;
uint8_t _unknown250[49]; uint8_t _unknown250[49];
uint8_t _unknown281; uint8_t sta_bssid_set; // 0x281 One if bssid is used, otherwise zero.
uint8_t _unknown282[6]; uint8_t sta_bssid[6]; // 0x282
uint32_t _unknown288; uint16_t _unknown288;
uint16_t _unknown28a;
uint8_t _unknown28c; uint8_t _unknown28c;
uint8_t _unknown28d[31]; uint8_t _unknown28d[21];
uint8_t _unknown2ac[64]; uint8_t _unknown2a0; // used in dhcp_bind_check wpa_main.o
uint8_t _unknown2a1[9];
char _unknown2ac[64]; // string.
uint8_t _unknonwn2ec; uint8_t _unknonwn2ec;
uint8_t _unknown2ed[32]; uint8_t _unknown2ed[32];
uint8_t _unknown30d; uint8_t _unknown30d; // result of ieee80211_chan2ieee
uint8_t _unknown30e; uint8_t _unknown30e;
uint8_t _unknown30f; uint8_t _unknown30f;
uint8_t _unknown310; uint8_t _unknown310; // count of entries in the softap conninfo array, less two.
uint8_t _unknown311[3]; uint8_t _unknown311[3];
@ -194,7 +294,20 @@ struct sdk_g_ic_st {
struct sdk_g_ic_saved_st s; // 0x1d8 - 0x548 struct sdk_g_ic_saved_st s; // 0x1d8 - 0x548
}; };
extern struct sdk_g_ic_st sdk_g_ic;
struct esf_buf {
struct pbuf *pbuf1; // 0x00
struct pbuf *pbuf2; // 0x04
uint32_t *_unknown8_; // 0x08
uint32_t *_unknownc_; // 0x0c
uint8_t *frame; // 0x10 IEEE-802.11 payload data?
uint16_t _unknown14_; // 0x14
uint16_t length; // 0x16
uint32_t *_unknown18_; // 0x18
struct esf_buf *next; // 0x1c Free list.
void *extra; // 0x20
};
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// The above structures all refer to data regions outside our control, and a // The above structures all refer to data regions outside our control, and a
@ -205,35 +318,65 @@ extern struct sdk_g_ic_st sdk_g_ic;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
_Static_assert(sizeof(struct sdk_info_st) == 0x24, "info_st is the wrong size!"); _Static_assert(sizeof(struct sdk_info_st) == 0x24, "info_st is the wrong size!");
_Static_assert(offsetof(struct sdk_info_st, sta_mac_addr) == 0x1e, "bad struct");
_Static_assert(offsetof(struct _unknown_info1, channel) == 0x06, "bad struct");
_Static_assert(sizeof(struct _unknown_softap2) == 0xcc, "_unknown_softap2 is the wrong size!");
_Static_assert(offsetof(struct _unknown_softap2, _unknownb8) == 0xb8, "bad struct");
_Static_assert(sizeof(struct _unknown_softap1) == 0x1c, "_unknown_softap1 is the wrong size!");
_Static_assert(offsetof(struct _unknown_softap1, _unknown18) == 0x18, "bad struct");
_Static_assert(sizeof(struct _unknown_wpa1) == 0x4c, "_unknown_wpa1 is the wrong size!");
_Static_assert(offsetof(struct _unknown_wpa1, _unknown48) == 0x48, "bad struct");
_Static_assert(offsetof(struct sdk_netif_conninfo, _unknown78) == 0x78, "bad struct");
_Static_assert(offsetof(struct sdk_netif_conninfo, _unknown108) == 0x108, "bad struct");
_Static_assert(offsetof(struct sdk_g_ic_netif_info, started) == 0xbb, "bad struct");
_Static_assert(sizeof(struct sdk_g_ic_volatile_st) == 0x1d8, "sdk_g_ic_volatile_st is the wrong size!"); _Static_assert(sizeof(struct sdk_g_ic_volatile_st) == 0x1d8, "sdk_g_ic_volatile_st is the wrong size!");
_Static_assert(offsetof(struct sdk_g_ic_volatile_st, _unknown1d5) == 0x1d5, "bad struct");
_Static_assert(sizeof(struct sdk_g_ic_saved_st) == 0x370, "sdk_g_ic_saved_st is the wrong size!"); _Static_assert(sizeof(struct sdk_g_ic_saved_st) == 0x370, "sdk_g_ic_saved_st is the wrong size!");
_Static_assert(offsetof(struct sdk_g_ic_saved_st, _unknown1e4) == 0x1e4 - 0x1d8, "bad struct");
_Static_assert(offsetof(struct sdk_g_ic_saved_st, _unknown546) == 0x546 - 0x1d8, "bad struct");
_Static_assert(sizeof(struct sdk_g_ic_st) == 0x548, "sdk_g_ic_st is the wrong size!"); _Static_assert(sizeof(struct sdk_g_ic_st) == 0x548, "sdk_g_ic_st is the wrong size!");
/////////////////////////////////////////////////////////////////////////////// _Static_assert(sizeof(struct esf_buf) == 0x24, "struct esf_buf: wrong size");
// Function Prototypes // _Static_assert(offsetof(struct esf_buf, extra) == 0x20, "bad struct");
/////////////////////////////////////////////////////////////////////////////// _Static_assert(offsetof(struct esf_buf, length) == 0x16, "bad struct");
sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size); // The SDK access some slots in lwip structures.
sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size);
void sdk_cnx_attach(struct sdk_g_ic_st *); // The netif->state is initialized in netif_add within lwip with a struct
void sdk_ets_timer_init(void); // sdk_g_ic_netif_info, see sdk_wifi_station_start and sdk_wifi_softap_start.
void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *); // There is a known sdk read of the netif->state in ieee80211_output.o
void sdk_ieee80211_phy_init(enum sdk_phy_mode); // ieee80211_output_pbuf and perhaps elsewhere. The value is just passed through
void sdk_lmacInit(void); // lwip and and not used by lwip so just ensure this slot is at the expected
void sdk_phy_disable_agc(void); // offset.
void sdk_phy_enable_agc(void); _Static_assert(offsetof(struct netif, state) == 28, "netif->state offset wrong!");
void sdk_pm_attach(void);
void sdk_pp_attach(void); // Some sdk uses of netif->hwaddr have been converted to source code, but many
void sdk_pp_soft_wdt_init(void); // remain, but the content of this slot should not change in future versions of
int sdk_register_chipv6_phy(sdk_phy_info_t *); // lwip, so just ensure it is at the expected offset.
void sdk_sleep_reset_analog_rtcreg_8266(void); _Static_assert(offsetof(struct netif, hwaddr) == 41, "netif->hwaddr offset wrong!");
uint32_t sdk_system_get_checksum(uint8_t *, uint32_t);
void sdk_wDevEnableRx(void); // Most sdk uses of the netif->flags have been converted to source code. One
void sdk_wDev_Initialize(void); // known sdk binary read of the flags remains in wl_cnx.o:sdk_cnx_sta_leave
void sdk_wifi_mode_set(uint8_t); // which checks the NETIF_FLAG_DHCP flag. The NETIF_FLAG_DHCP has been removed
void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *); // in lwip v2, so some lwip hacks are needed to handle this for now until
void sdk_wifi_softap_set_default_ssid(void); // wl_cnx.o is converted so source code too.
void sdk_wifi_softap_start(void); _Static_assert(offsetof(struct netif, flags) == 47, "netif->flags offset wrong!");
void sdk_wifi_station_start(void);
_Static_assert(offsetof(struct pbuf, eb) == 16, "pbuf->eb offset wrong!");
/// Misc.
err_t ethernetif_init(struct netif *netif);
void ethernetif_input(struct netif *netif, struct pbuf *p);
#endif /* _INTERNAL_SDK_STRUCTURES_H */ #endif /* _INTERNAL_SDK_STRUCTURES_H */

View file

@ -6,26 +6,58 @@
Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries.
BSD Licensed as described in the file LICENSE. BSD Licensed as described in the file LICENSE.
*/ */
#include "sdk_internal.h"
#ifndef _ESPLIBS_LIBMAIN_H #ifndef _ESPLIBS_LIBMAIN_H
#define _ESPLIBS_LIBMAIN_H #define _ESPLIBS_LIBMAIN_H
#include "sdk_internal.h" #include "sdk_internal.h"
// app_main.o
extern uint8_t sdk_user_init_flag;
extern struct sdk_info_st sdk_info;
// ets_timer.o
extern uint32_t sdk_debug_timer;
extern void *sdk_debug_timerfn;
void sdk_ets_timer_init(void);
// misc.c // misc.c
int sdk_os_get_cpu_frequency(void); int sdk_os_get_cpu_frequency(void);
/* Don't call this function from user code, it doesn't change the CPU /* Don't call this function from user code, it doesn't change the CPU
* speed. Call sdk_system_update_cpu_freq() instead. */ * speed. Call sdk_system_update_cpu_freq() instead. */
void sdk_os_update_cpu_frequency(int freq); void sdk_os_update_cpu_frequency(int freq);
// user_interface.c // os_cpu_a.o
// spi_flash.o
extern sdk_flashchip_t sdk_flashchip;
sdk_SpiFlashOpResult sdk_SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size);
sdk_SpiFlashOpResult sdk_SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size);
// timers.o
void sdk_os_timer_setfn(ETSTimer *ptimer, ETSTimerFunc *pfunction, void *parg);
void sdk_os_timer_arm(ETSTimer *ptimer, uint32_t milliseconds, bool repeat_flag);
void sdk_os_timer_disarm(ETSTimer *ptimer);
// uart.o
void sdk_uart_div_modify(uint32_t uart_no, uint32_t new_divisor);
// user_interface.o
extern enum sdk_dhcp_status sdk_dhcpc_flag; // uint8_t in the sdk
extern bool sdk_cpu_overclock;
extern struct sdk_rst_info sdk_rst_if;
extern sdk_wifi_promiscuous_cb_t sdk_promiscuous_cb;
void sdk_system_restart_in_nmi(void); void sdk_system_restart_in_nmi(void);
int sdk_system_get_test_result(void); int sdk_system_get_test_result(void);
void sdk_wifi_param_save_protect(struct sdk_g_ic_saved_st *data); void sdk_wifi_param_save_protect(struct sdk_g_ic_saved_st *data);
bool sdk_system_overclock(void); bool sdk_system_overclock(void);
bool sdk_system_restoreclock(void); bool sdk_system_restoreclock(void);
uint32_t sdk_system_relative_time(uint32_t reltime); uint32_t sdk_system_relative_time(uint32_t reltime);
uint32_t sdk_system_get_checksum(uint8_t *, uint32_t);
void sdk_wifi_softap_cacl_mac(uint8_t *, uint8_t *);
void sdk_wifi_softap_set_default_ssid(void);
// xtensa_context.o
#endif /* _ESPLIBS_LIBMAIN_H */ #endif /* _ESPLIBS_LIBMAIN_H */

View file

@ -6,17 +6,90 @@
Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries. Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries.
BSD Licensed as described in the file LICENSE. BSD Licensed as described in the file LICENSE.
*/ */
#ifndef _ESPLIBS_LIBNET80211_H #ifndef _ESPLIBS_LIBNET80211_H
#define _ESPLIBS_LIBNET80211_H #define _ESPLIBS_LIBNET80211_H
// Defined in wl_cnx.o #include "sdk_internal.h"
// ieee80211_action.o
// ieee80211_crypto_ccmp.o
extern uint32_t sdk_ccmp;
// ieee80211_crypto.o
// ieee80211_crypto_tkip.o
extern uint32_t sdk_tkip;
// ieee80211_crypto_wep.o
extern uint32_t sdk_wep;
// ieee80211_ets.o
struct esf_buf *sdk_ieee80211_getmgtframe(void **arg0, uint32_t arg1, uint32_t arg2);
// ieee80211_hostap.o
extern uint8_t sdk_TmpSTAAPCloseAP;
extern uint8_t sdk_PendFreeBcnEb;
void sdk_ieee80211_hostap_attach(struct sdk_g_ic_st *);
void sdk_hostap_handle_timer(struct sdk_netif_conninfo *cnx_node);
bool sdk_wifi_softap_start();
bool sdk_wifi_softap_stop();
// ieee80211_ht.o
// ieee80211_input.o
void sdk_ieee80211_deliver_data(struct sdk_g_ic_netif_info *netif_info, struct esf_buf *esf_buf);
// The esf_buf is stored in the pbuf->eb slot.
void sdk_ieee80211_deliver_data(struct sdk_g_ic_netif_info *netif_info, struct esf_buf *eb);
// ieee80211.o
extern struct sdk_g_ic_st sdk_g_ic;
extern uint32_t sdk_xieee80211Queue;
void sdk_ieee80211_ifattach(struct sdk_g_ic_st *, uint8_t *);
void sdk_wifi_mode_set(uint8_t);
// ieee80211_output.o
int8_t sdk_ieee80211_output_pbuf(struct netif *ifp, struct pbuf* pb);
void sdk_ieee80211_send_mgmt(struct sdk_g_ic_netif_info *info, int, int);
struct esf_buf *sdk_ieee80211_beacon_alloc(struct sdk_g_ic_netif_info *, uint32_t *);
// ieee80211_phy.o
uint32_t sdk_ieee80211_phy_type_get();
void sdk_ieee80211_phy_init(enum sdk_phy_mode);
// ieee80211_power.o
void sdk_ieee80211_pwrsave(void *, struct esf_buf *b);
// ieee80211_proto.o
extern uint8_t sdk_ieee80211_addr_bcast[6];
// ieee80211_scan.o
extern uint32_t sdk_ugScanStruct; // A struct.
extern uint8_t sdk_auth_type;
extern uint16_t sdk_scannum;
void sdk_scan_cancel();
// ieee80211_sta.o
void sdk_ieee80211_sta_new_state(struct sdk_g_ic_st *, int, int);
void sdk_sta_status_set(int status);
bool sdk_wifi_station_start();
bool sdk_wifi_station_stop();
// wl_chm.o
void sdk_chm_set_current_channel(uint32_t *);
int sdk_ieee80211_chan2ieee(int *);
int sdk_chm_check_same_channel();
// wl_cnx.o
extern ETSTimer sdk_sta_con_timer; extern ETSTimer sdk_sta_con_timer;
extern void *sdk_g_cnx_probe_rc_list_cb;
// Defined in ieee80211_sta.o: .irom0.text+0xcc4 void sdk_cnx_sta_leave(struct sdk_g_ic_netif_info *netif_info, void *);
bool sdk_wifi_station_stop(void); void *sdk_cnx_node_search(uint8_t mac[6]);
void sdk_cnx_node_leave(struct sdk_g_ic_netif_info *netif, struct sdk_netif_conninfo *conn);
// Defined in ieee80211_hostap.o: .irom0.text+0x1184 void sdk_cnx_rc_update_state_metric(void *, int, int);
bool sdk_wifi_softap_stop(void); void sdk_cnx_remove_rc(void *);
void sdk_cnx_attach(struct sdk_g_ic_st *);
#endif /* _ESPLIBS_LIBNET80211_H */ #endif /* _ESPLIBS_LIBNET80211_H */

View file

@ -9,8 +9,57 @@
#ifndef _ESPLIBS_LIBPHY_H #ifndef _ESPLIBS_LIBPHY_H
#define _ESPLIBS_LIBPHY_H #define _ESPLIBS_LIBPHY_H
// Defined in phy_chip_v6_ana.o: .irom0.text+0x12d8 #include "sdk_internal.h"
// phy_chip_v5_ana_romfunc.o
// phy_chip_v5_cal_romfunc.o
// phy_chip_v5_romfunc.o
// phy_chip_v6_ana.o
uint32_t sdk_test_tout(bool); uint32_t sdk_test_tout(bool);
uint32_t sdk_readvdd33();
// phy_chip_v6_cal.o
extern uint16_t sdk_loop_pwctrl_pwdet_error_accum_high_power;
extern uint8_t sdk_tx_pwctrl_pk_num;
extern uint8_t sdk_loop_pwctrl_correct_atten_high_power;
extern uint8_t sdk_tx_pwctrl_set_chan_flag;
extern uint8_t sdk_rxiq_cover_fail_num;
// phy_chip_v6.o
extern uint16_t sdk_tx_rf_ana_gain;
extern uint32_t sdk_rxiq_compute_num;
extern uint8_t sdk_rxdc_init_flag;
extern uint32_t sdk_check_result;
extern uint32_t sdk_chip6_sleep_params;
extern uint8_t sdk_chip6_phy_init_ctrl;
extern uint32_t sdk_phy_freq_offset;
extern uint8_t sdk_do_pwctrl_flag;
extern uint8_t sdk_pwctrl_debug;
extern uint8_t sdk_txbk_dpdby_flag;
extern uint8_t sdk_sw_scan_mode;
extern uint32_t sdk_periodic_cal_dc_num;
extern uint8_t sdk_periodic_cal_flag;
extern uint8_t sdk_bbpll_cal_flag;
extern uint8_t sdk_deep_sleep_en;
int sdk_register_chipv6_phy(sdk_phy_info_t *);
// phy_chip_v6_unused.o
// phy.o
void sdk_phy_disable_agc(void);
void sdk_phy_enable_agc(void);
// phy_sleep.o
extern uint32_t sdk_chip_version;
extern uint8_t sdk_periodic_cal_sat;
extern uint8_t sdk_software_slp_reject;
extern uint8_t sdk_SDIO_slp_reject;
extern uint8_t sdk_hardware_reject;
void sdk_sleep_reset_analog_rtcreg_8266(void);
#endif /* _ESPLIBS_LIBPHY_H */ #endif /* _ESPLIBS_LIBPHY_H */

View file

@ -9,31 +9,67 @@
#ifndef _ESPLIBS_LIBPP_H #ifndef _ESPLIBS_LIBPP_H
#define _ESPLIBS_LIBPP_H #define _ESPLIBS_LIBPP_H
// Located in wdev.o #include "sdk_internal.h"
extern uint32_t sdk_WdevTimOffSet;
// Defined in pp.o: .irom0.text+0xa08 // esf_buf.o
void sdk_ppRecycleRxPkt(void *); struct esf_buf *sdk_esf_rx_buf_alloc(uint32_t n); // n must be 7.
struct esf_buf *sdk_esf_buf_alloc(void *, uint32_t n);
void sdk_esf_buf_recycle(struct esf_buf *buf, int);
void sdk_esf_buf_setup(void);
// Defined in pm.o: .irom0.text+0x74 // if_hwctrl.o
extern uint8_t sdk_interface_mask;
//extern ? sdk_if_ctrl;
void sdk_ic_set_vif(int, int, uint8_t (*)[6], int, int);
void sdk_ic_bss_info_update(int, uint8_t (*hwaddr)[], int, int);
void sdk_ic_set_sta(int, int, void *, int, int, int, int, int);
// lmac.o
extern uint32_t sdk_lmacConfMib;
void sdk_lmacInit(void);
// mac_frame.o
// pm.o
struct esf_buf *sdk_ieee80211_getmgtframe(void **arg0, uint32_t arg1, uint32_t arg2);
void sdk_pm_attach(void);
uint32_t sdk_pm_rtc_clock_cali_proc(void); uint32_t sdk_pm_rtc_clock_cali_proc(void);
// Defined in pm.o: .irom0.text+0xb8
void sdk_pm_set_sleep_time(uint32_t); void sdk_pm_set_sleep_time(uint32_t);
// Defined in pm.o: .irom0.text+0x1758
uint8_t sdk_pm_is_waked(void); uint8_t sdk_pm_is_waked(void);
// Defined in pm.o: .irom0.text+0x1774
bool sdk_pm_is_open(void); bool sdk_pm_is_open(void);
// Defined in pm.o: .irom0.text+0x19ac
bool sdk_pm_post(int); bool sdk_pm_post(int);
enum sdk_sleep_type sdk_pm_get_sleep_type(void);
void sdk_pm_set_sleep_type_from_upper(enum sdk_sleep_type);
// Defined in wdev.o: .irom0.text+0x450
// pp.o
extern uint16_t sdk_NoiseTimerInterval;
extern uint16_t sdk_sleep_start_wait_time;
extern uint8_t sdk_pend_flag_noise_check;
extern uint8_t sdk_pend_flag_periodic_cal;
extern uint8_t sdk_dbg_stop_sw_wdt;
extern uint8_t sdk_dbg_stop_hw_wdt;
bool sdk_ppRegisterTxCallback(void *, int);
bool sdk_ppTxPkt(struct esf_buf *);
void sdk_ppRecycleRxPkt(void *);
void sdk_pp_attach(void);
void sdk_pp_soft_wdt_init(void);
void sdk_pp_soft_wdt_feed();
void sdk_pp_post(int, int);
// rate_control.o
// trc.o
// wdev.o
extern uint8_t sdk_NMIIrqIsOn;
extern uint32_t sdk_WdevTimOffSet;
uint32_t sdk_wDev_Get_Next_TBTT();
void sdk_wDev_Reset_TBTT();
void sdk_wDev_SetRxPolicy(int, int, int);
void sdk_wDevEnableRx(void);
void sdk_wDev_Initialize(void);
void sdk_wDev_MacTim1SetFunc(void (*func)(void)); void sdk_wDev_MacTim1SetFunc(void (*func)(void));
// Defined in wdev.o: .text+0x4a8
void sdk_wDev_MacTim1Arm(uint32_t); void sdk_wDev_MacTim1Arm(uint32_t);
#endif /* _ESPLIBS_LIBPP_H */ #endif /* _ESPLIBS_LIBPP_H */

View file

@ -0,0 +1,80 @@
/* Internal function declarations for Espressif SDK libpp functions.
These are internal-facing declarations, it is not recommended to include these headers in your program.
(look at the headers in include/espressif/ instead and use these whenever possible.)
Copyright (C) 2015 Espressif Systems. Derived from MIT Licensed SDK libraries.
BSD Licensed as described in the file LICENSE.
*/
#ifndef _ESPLIBS_LIBWPA_H
#define _ESPLIBS_LIBWPA_H
#include "sdk_internal.h"
// aes-internal-dec.o
// aes-internal-enc.o
// aes-internal.o
// aes-unwrap.o
// aes-wrap.o
// ap_config.o
// Seems to be passed 3 args, but only uses 2?
int sdk_hostapd_setup_wpa_psk(struct _unknown_softap2 *);
// common.o
// ieee802_1x.o
// md5-internal.o
// md5.o
// os_xtensa.o
// rc4.o
// sha1-internal.o
// sha1.o
// sha1-pbkdf2.o
// sta_info.o
// wpa_auth_ie.o
// wpa_auth.o
uint32_t *sdk_wpa_init(uint8_t (*hwaddr)[], struct _unknown_wpa1 *, int);
// wpabuf.o
// wpa_common.o
// wpa_debug.o
// wpa_ie.o
// wpa_main
void sdk_ppInstallKey(void *, int, int);
void sdk_wpa_config_profile(struct sdk_g_ic_st *);
void sdk_wpa_config_bss(struct sdk_g_ic_st *g_ic, uint8_t (* hwaddr2)[6]);
void sdk_wpa_config_assoc_ie(int , int16_t *, int32_t);
void sdk_dhcp_bind_check();
void sdk_eagle_auth_done();
void sdk_wpa_neg_complete();
void sdk_wpa_attach(struct sdk_g_ic_st *);
// wpa.o
void sdk_wpa_set_profile(uint8_t);
void sdk_wpa_set_bss(uint8_t *hwaddr1, uint8_t (* hwaddr2)[6], uint8_t, uint8_t, uint8_t *, uint8_t *ssid, int);
void sdk_eapol_txcb();
void sdk_wpa_register(int, void *, void *, void *, void *, void *);
// wpas_glue.o
#endif /* _ESPLIBS_LIBWPA_H */

View file

@ -31,7 +31,6 @@
#include "espressif/osapi.h" #include "espressif/osapi.h"
#include "espressif/user_interface.h" #include "espressif/user_interface.h"
#include "sdk_internal.h"
#include "esplibs/libmain.h" #include "esplibs/libmain.h"
#include "esplibs/libpp.h" #include "esplibs/libpp.h"
#include "esplibs/libphy.h" #include "esplibs/libphy.h"
@ -530,10 +529,10 @@ bool sdk_wifi_station_dhcpc_start(void) {
return false; return false;
} }
if (netif && sdk_dhcpc_flag == DHCP_STOPPED) { if (netif && sdk_dhcpc_flag == DHCP_STOPPED) {
sdk_info.ipaddr.addr = 0; sdk_info.sta_ipaddr.addr = 0;
sdk_info.netmask.addr = 0; sdk_info.sta_netmask.addr = 0;
sdk_info.gw.addr = 0; sdk_info.sta_gw.addr = 0;
netif_set_addr(netif, &sdk_info.ipaddr, &sdk_info.netmask, &sdk_info.gw); netif_set_addr(netif, &sdk_info.sta_ipaddr, &sdk_info.sta_netmask, &sdk_info.sta_gw);
if (dhcp_start(netif)) { if (dhcp_start(netif)) {
return false; return false;
} }