1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

emulation on host: missing mock functions, improve host interface handling (#7404)

This commit is contained in:
david gauchard 2020-06-24 19:05:57 +02:00 committed by GitHub
parent b26388812a
commit 5d60c55fb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 411 additions and 388 deletions

View File

@ -108,6 +108,11 @@ uint32_t EspClass::getFreeHeap()
return 30000; return 30000;
} }
uint16_t EspClass::getMaxFreeBlockSize()
{
return 20000;
}
String EspClass::getResetReason() String EspClass::getResetReason()
{ {
return "Power on"; return "Power on";

View File

@ -145,3 +145,8 @@ void WiFiServer::close ()
::close(pcb2int(_listen_pcb)); ::close(pcb2int(_listen_pcb));
_listen_pcb = int2pcb(-1); _listen_pcb = int2pcb(-1);
} }
void WiFiServer::stop ()
{
close();
}

View File

@ -46,38 +46,38 @@ extern "C"
#include <user_interface.h> #include <user_interface.h>
#include <lwip/netif.h> #include <lwip/netif.h>
uint8 wifi_get_opmode(void) uint8 wifi_get_opmode(void)
{ {
return STATION_MODE; return STATION_MODE;
} }
phy_mode_t wifi_get_phy_mode(void) phy_mode_t wifi_get_phy_mode(void)
{ {
return PHY_MODE_11N; return PHY_MODE_11N;
} }
uint8 wifi_get_channel (void) uint8 wifi_get_channel(void)
{ {
return 1; return 1;
} }
uint8 wifi_station_get_current_ap_id (void) uint8 wifi_station_get_current_ap_id(void)
{ {
return 0; return 0;
} }
station_status_t wifi_station_get_connect_status (void) station_status_t wifi_station_get_connect_status(void)
{ {
return STATION_GOT_IP; return STATION_GOT_IP;
} }
uint8 wifi_station_get_auto_connect (void) uint8 wifi_station_get_auto_connect(void)
{ {
return 1; return 1;
} }
bool wifi_station_get_config (struct station_config *config) bool wifi_station_get_config(struct station_config *config)
{ {
strcpy((char*)config->ssid, "emulated-ssid"); strcpy((char*)config->ssid, "emulated-ssid");
strcpy((char*)config->password, "emulated-ssid-password"); strcpy((char*)config->password, "emulated-ssid-password");
config->bssid_set = 0; config->bssid_set = 0;
@ -89,38 +89,38 @@ bool wifi_station_get_config (struct station_config *config)
config->open_and_wep_mode_disable = true; config->open_and_wep_mode_disable = true;
#endif #endif
return true; return true;
} }
void wifi_fpm_close(void) void wifi_fpm_close(void)
{ {
} }
sint8 wifi_fpm_do_sleep (uint32 sleep_time_in_us) sint8 wifi_fpm_do_sleep(uint32 sleep_time_in_us)
{ {
usleep(sleep_time_in_us); usleep(sleep_time_in_us);
return 1; return 1;
} }
void wifi_fpm_do_wakeup (void) void wifi_fpm_do_wakeup(void)
{ {
} }
void wifi_fpm_open (void) void wifi_fpm_open(void)
{ {
} }
void wifi_fpm_set_sleep_type (sleep_type_t type) void wifi_fpm_set_sleep_type(sleep_type_t type)
{ {
(void)type; (void)type;
} }
uint32_t global_ipv4_netfmt = 0; // global binding uint32_t global_ipv4_netfmt = 0; // global binding
netif netif0; netif netif0;
uint32_t global_source_address = INADDR_ANY; uint32_t global_source_address = INADDR_ANY;
bool wifi_get_ip_info (uint8 if_index, struct ip_info *info) bool wifi_get_ip_info(uint8 if_index, struct ip_info *info)
{ {
// emulate wifi_get_ip_info() // emulate wifi_get_ip_info()
// ignore if_index // ignore if_index
// use global option -i (host_interface) to select bound interface/address // use global option -i (host_interface) to select bound interface/address
@ -135,18 +135,17 @@ bool wifi_get_ip_info (uint8 if_index, struct ip_info *info)
perror("getifaddrs"); perror("getifaddrs");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (host_interface) if (host_interface)
mockverbose("host: looking for interface '%s':\n", host_interface); mockverbose("host: looking for interface '%s':\n", host_interface);
else
mockverbose("host: looking the first for non-local IPv4 interface:\n");
for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next)
{ {
mockverbose("host: interface: %s", ifa->ifa_name); mockverbose("host: interface: %s", ifa->ifa_name);
if ( ifa->ifa_addr if (ifa->ifa_addr
&& ifa->ifa_addr->sa_family == AF_INET // ip_info is IPv4 only && ifa->ifa_addr->sa_family == AF_INET // ip_info is IPv4 only
) )
{ {
auto test_ipv4 = lwip_ntohl(*(uint32_t*)&((struct sockaddr_in*)ifa->ifa_addr)->sin_addr); auto test_ipv4 = lwip_ntohl(*(uint32_t*) & ((struct sockaddr_in*)ifa->ifa_addr)->sin_addr);
mockverbose(" IPV4 (0x%08lx)", test_ipv4); mockverbose(" IPV4 (0x%08lx)", test_ipv4);
if ((test_ipv4 & 0xff000000) == 0x7f000000) if ((test_ipv4 & 0xff000000) == 0x7f000000)
// 127./8 // 127./8
@ -156,9 +155,10 @@ bool wifi_get_ip_info (uint8 if_index, struct ip_info *info)
if (!host_interface || (host_interface && strcmp(ifa->ifa_name, host_interface) == 0)) if (!host_interface || (host_interface && strcmp(ifa->ifa_name, host_interface) == 0))
{ {
// use the first non-local interface, or, if specified, the one selected by user on cmdline // use the first non-local interface, or, if specified, the one selected by user on cmdline
ipv4 = *(uint32_t*)&((struct sockaddr_in*)ifa->ifa_addr)->sin_addr; ipv4 = *(uint32_t*) & ((struct sockaddr_in*)ifa->ifa_addr)->sin_addr;
mask = *(uint32_t*)&((struct sockaddr_in*)ifa->ifa_netmask)->sin_addr; mask = *(uint32_t*) & ((struct sockaddr_in*)ifa->ifa_netmask)->sin_addr;
mockverbose(" (selected)\n"); mockverbose(" (selected)\n");
if (host_interface)
global_source_address = ntohl(ipv4); global_source_address = ntohl(ipv4);
break; break;
} }
@ -166,6 +166,7 @@ bool wifi_get_ip_info (uint8 if_index, struct ip_info *info)
} }
mockverbose("\n"); mockverbose("\n");
} }
if (ifAddrStruct != NULL) if (ifAddrStruct != NULL)
freeifaddrs(ifAddrStruct); freeifaddrs(ifAddrStruct);
@ -190,15 +191,15 @@ bool wifi_get_ip_info (uint8 if_index, struct ip_info *info)
} }
return true; return true;
} }
uint8 wifi_get_listen_interval (void) uint8 wifi_get_listen_interval(void)
{ {
return 1; return 1;
} }
bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr) bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr)
{ {
(void)if_index; (void)if_index;
macaddr[0] = 0xde; macaddr[0] = 0xde;
macaddr[1] = 0xba; macaddr[1] = 0xba;
@ -207,177 +208,177 @@ bool wifi_get_macaddr(uint8 if_index, uint8 *macaddr)
macaddr[4] = 0xe0; macaddr[4] = 0xe0;
macaddr[5] = 0x42; macaddr[5] = 0x42;
return true; return true;
} }
uint8 wifi_get_opmode_default (void) uint8 wifi_get_opmode_default(void)
{ {
return STATION_MODE; return STATION_MODE;
} }
#ifdef NONOSDK3V0 #ifdef NONOSDK3V0
sleep_level_t wifi_get_sleep_level (void) sleep_level_t wifi_get_sleep_level(void)
{ {
return MIN_SLEEP_T; return MIN_SLEEP_T;
} }
#endif // nonos-sdk-pre-3 #endif // nonos-sdk-pre-3
sleep_type_t wifi_get_sleep_type (void) sleep_type_t wifi_get_sleep_type(void)
{ {
return NONE_SLEEP_T; return NONE_SLEEP_T;
} }
bool wifi_set_channel (uint8 channel) bool wifi_set_channel(uint8 channel)
{ {
(void)channel; (void)channel;
return true; return true;
} }
wifi_event_handler_cb_t wifi_event_handler_cb_emu = nullptr; wifi_event_handler_cb_t wifi_event_handler_cb_emu = nullptr;
void wifi_set_event_handler_cb (wifi_event_handler_cb_t cb) void wifi_set_event_handler_cb(wifi_event_handler_cb_t cb)
{ {
wifi_event_handler_cb_emu = cb; wifi_event_handler_cb_emu = cb;
mockverbose("TODO: wifi_set_event_handler_cb set\n"); mockverbose("TODO: wifi_set_event_handler_cb set\n");
} }
bool wifi_set_ip_info (uint8 if_index, struct ip_info *info) bool wifi_set_ip_info(uint8 if_index, struct ip_info *info)
{ {
(void)if_index; (void)if_index;
(void)info; (void)info;
return false; return false;
} }
bool wifi_set_listen_interval (uint8 interval) bool wifi_set_listen_interval(uint8 interval)
{ {
(void)interval; (void)interval;
return true; return true;
} }
bool wifi_set_opmode (uint8 opmode) bool wifi_set_opmode(uint8 opmode)
{ {
return opmode == STATION_MODE || opmode == STATIONAP_MODE; return opmode == STATION_MODE || opmode == STATIONAP_MODE;
} }
bool wifi_set_opmode_current (uint8 opmode) bool wifi_set_opmode_current(uint8 opmode)
{ {
return opmode == STATION_MODE || opmode == STATIONAP_MODE; return opmode == STATION_MODE || opmode == STATIONAP_MODE;
} }
bool wifi_set_phy_mode (phy_mode_t mode) bool wifi_set_phy_mode(phy_mode_t mode)
{ {
(void)mode; (void)mode;
return true; return true;
} }
#ifdef NONOSDK3V0 #ifdef NONOSDK3V0
bool wifi_set_sleep_level (sleep_level_t level) bool wifi_set_sleep_level(sleep_level_t level)
{ {
(void)level; (void)level;
return true; return true;
} }
#endif #endif
bool wifi_set_sleep_type (sleep_type_t type) bool wifi_set_sleep_type(sleep_type_t type)
{ {
(void)type; (void)type;
return true; return true;
} }
bool wifi_station_connect (void) bool wifi_station_connect(void)
{ {
return true; return true;
} }
bool wifi_station_dhcpc_start (void) bool wifi_station_dhcpc_start(void)
{ {
return true; return true;
} }
bool wifi_station_dhcpc_stop (void) bool wifi_station_dhcpc_stop(void)
{ {
return true; return true;
} }
bool wifi_station_disconnect (void) bool wifi_station_disconnect(void)
{ {
return true; return true;
} }
bool wifi_station_get_config_default (struct station_config *config) bool wifi_station_get_config_default(struct station_config *config)
{ {
return wifi_station_get_config(config); return wifi_station_get_config(config);
} }
char wifi_station_get_hostname_str [128]; char wifi_station_get_hostname_str [128];
const char* wifi_station_get_hostname (void) const char* wifi_station_get_hostname(void)
{ {
return strcpy(wifi_station_get_hostname_str, "esposix"); return strcpy(wifi_station_get_hostname_str, "esposix");
} }
bool wifi_station_get_reconnect_policy () bool wifi_station_get_reconnect_policy()
{ {
return true; return true;
} }
sint8 wifi_station_get_rssi (void) sint8 wifi_station_get_rssi(void)
{ {
return 5; return 5;
} }
bool wifi_station_set_auto_connect (uint8 set) bool wifi_station_set_auto_connect(uint8 set)
{ {
return set != 0; return set != 0;
} }
bool wifi_station_set_config (struct station_config *config) bool wifi_station_set_config(struct station_config *config)
{ {
(void)config; (void)config;
return true; return true;
} }
bool wifi_station_set_config_current (struct station_config *config) bool wifi_station_set_config_current(struct station_config *config)
{ {
(void)config; (void)config;
return true; return true;
} }
bool wifi_station_set_hostname (const char *name) bool wifi_station_set_hostname(const char *name)
{ {
(void)name; (void)name;
return true; return true;
} }
bool wifi_station_set_reconnect_policy (bool set) bool wifi_station_set_reconnect_policy(bool set)
{ {
(void)set; (void)set;
return true; return true;
} }
void system_phy_set_max_tpw (uint8 max_tpw) void system_phy_set_max_tpw(uint8 max_tpw)
{ {
(void)max_tpw; (void)max_tpw;
} }
bool wifi_softap_dhcps_start(void) bool wifi_softap_dhcps_start(void)
{ {
return true; return true;
} }
enum dhcp_status wifi_softap_dhcps_status(void) enum dhcp_status wifi_softap_dhcps_status(void)
{ {
return DHCP_STARTED; return DHCP_STARTED;
} }
bool wifi_softap_dhcps_stop(void) bool wifi_softap_dhcps_stop(void)
{ {
return true; return true;
} }
bool wifi_softap_get_config(struct softap_config *config) bool wifi_softap_get_config(struct softap_config *config)
{ {
strcpy((char*)config->ssid, "apssid"); strcpy((char*)config->ssid, "apssid");
strcpy((char*)config->password, "appasswd"); strcpy((char*)config->password, "appasswd");
config->ssid_len = strlen("appasswd"); config->ssid_len = strlen("appasswd");
@ -387,105 +388,105 @@ bool wifi_softap_get_config(struct softap_config *config)
config->max_connection = 4; config->max_connection = 4;
config->beacon_interval = 100; config->beacon_interval = 100;
return true; return true;
} }
bool wifi_softap_get_config_default(struct softap_config *config) bool wifi_softap_get_config_default(struct softap_config *config)
{ {
return wifi_softap_get_config(config); return wifi_softap_get_config(config);
} }
uint8 wifi_softap_get_station_num(void) uint8 wifi_softap_get_station_num(void)
{ {
return 2; return 2;
} }
bool wifi_softap_set_config(struct softap_config *config) bool wifi_softap_set_config(struct softap_config *config)
{ {
(void)config; (void)config;
return true; return true;
} }
bool wifi_softap_set_config_current(struct softap_config *config) bool wifi_softap_set_config_current(struct softap_config *config)
{ {
(void)config; (void)config;
return true; return true;
} }
bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please) bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please)
{ {
(void)please; (void)please;
return true; return true;
} }
bool wifi_softap_set_dhcps_lease_time(uint32 minute) bool wifi_softap_set_dhcps_lease_time(uint32 minute)
{ {
(void)minute; (void)minute;
return true; return true;
} }
bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg) bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg)
{ {
(void)level; (void)level;
(void)optarg; (void)optarg;
return true; return true;
} }
bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb) bool wifi_station_scan(struct scan_config *config, scan_done_cb_t cb)
{ {
(void)config; (void)config;
cb(nullptr, FAIL); cb(nullptr, FAIL);
return false; return false;
} }
uint32_t core_version = 1; uint32_t core_version = 1;
/////////////////////////////////////// ///////////////////////////////////////
// not user_interface // not user_interface
void ets_isr_mask (int intr) void ets_isr_mask(int intr)
{ {
(void)intr; (void)intr;
} }
void ets_isr_unmask (int intr) void ets_isr_unmask(int intr)
{ {
(void)intr; (void)intr;
} }
void esp_schedule (void) void esp_schedule(void)
{ {
} }
void dns_setserver (u8_t numdns, ip_addr_t *dnsserver) void dns_setserver(u8_t numdns, ip_addr_t *dnsserver)
{ {
(void)numdns; (void)numdns;
(void)dnsserver; (void)dnsserver;
} }
ip_addr_t dns_getserver (u8_t numdns) ip_addr_t dns_getserver(u8_t numdns)
{ {
(void)numdns; (void)numdns;
ip_addr_t addr = { 0x7f000001 }; ip_addr_t addr = { 0x7f000001 };
return addr; return addr;
} }
#include <smartconfig.h> #include <smartconfig.h>
bool smartconfig_start (sc_callback_t cb, ...) bool smartconfig_start(sc_callback_t cb, ...)
{ {
//XXXFIXME ... -> ptr //XXXFIXME ... -> ptr
cb(SC_STATUS_LINK, NULL); cb(SC_STATUS_LINK, NULL);
return true; return true;
} }
bool smartconfig_stop (void) bool smartconfig_stop(void)
{ {
return true; return true;
} }
sleep_type_t wifi_fpm_get_sleep_type(void) sleep_type_t wifi_fpm_get_sleep_type(void)
{ {
return NONE_SLEEP_T; return NONE_SLEEP_T;
} }
} // extern "C" } // extern "C"

View File

@ -8,23 +8,35 @@ pwd
test -d cores/esp8266 test -d cores/esp8266
test -d libraries test -d libraries
#all="cores/esp8266 libraries" # should be: all="cores/esp8266 libraries"
all=" all="
libraries/ESP8266mDNS libraries/ESP8266mDNS
libraries/Wire libraries/Wire
cores/esp8266/core_esp8266_si2c.cpp cores/esp8266/core_esp8266_si2c.cpp
" "
# core
for d in $all; do for d in $all; do
if [ -d "$d" ]; then
echo "-------- directory $d:"
for e in c cpp h; do for e in c cpp h; do
find $d -name "*.$e" -exec \ find $d -name "*.$e" -exec \
astyle \ astyle \
--suffix=none \ --suffix=none \
--options=${org}/astyle_core.conf {} \; --options=${org}/astyle_core.conf {} \;
done done
else
echo "-------- file $d:"
astyle --suffix=none --options=${org}/astyle_core.conf "$d"
fi
done done
# examples
for d in libraries; do for d in libraries; do
echo "-------- examples in $d:"
find $d -name "*.ino" -exec \ find $d -name "*.ino" -exec \
astyle \ astyle \
--suffix=none \ --suffix=none \