123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- #pragma once
- #include "esp_system.h"
- #include "esp_wifi.h"
- #include "esp_wifi_types.h"
- #include "squeezelite-ota.h"
- #include "cJSON.h"
- #include "esp_eth.h"
- #include "freertos/event_groups.h"
- #include "hsm.h"
- #include "esp_log.h"
- #include "network_services.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define ALL_NM_EVENTS \
- ADD_FIRST_EVENT(EN_LINK_UP) \
- ADD_EVENT(EN_LINK_DOWN)\
- ADD_EVENT(EN_CONFIGURE)\
- ADD_EVENT(EN_GOT_IP)\
- ADD_EVENT(EN_ETH_GOT_IP)\
- ADD_EVENT(EN_DELETE)\
- ADD_EVENT(EN_TIMER)\
- ADD_EVENT(EN_START)\
- ADD_EVENT(EN_SCAN)\
- ADD_EVENT(EN_FAIL)\
- ADD_EVENT(EN_SUCCESS)\
- ADD_EVENT(EN_SCAN_DONE)\
- ADD_EVENT(EN_CONNECT)\
- ADD_EVENT(EN_CONNECT_NEW)\
- ADD_EVENT(EN_REBOOT)\
- ADD_EVENT(EN_REBOOT_URL)\
- ADD_EVENT(EN_LOST_CONNECTION)\
- ADD_EVENT(EN_ETHERNET_FALLBACK)\
- ADD_EVENT(EN_UPDATE_STATUS)\
- ADD_EVENT(EN_CONNECTED)
- #define ADD_EVENT(name) name,
- #define ADD_FIRST_EVENT(name) name=1,
- typedef enum {
- ALL_NM_EVENTS
- } network_event_t;
- #undef ADD_EVENT
- #undef ADD_FIRST_EVENT
- typedef enum {
- OTA,
- RECOVERY,
- RESTART,
- } reboot_type_t;
- typedef struct {
- network_event_t trigger;
- char * ssid;
- char * password;
- reboot_type_t rtype;
- char* strval;
- wifi_event_sta_disconnected_t* disconnected_event;
- esp_netif_t *netif;
- } queue_message;
- typedef struct
- {
- state_machine_t Machine;
- const state_t* source_state;
- bool ethernet_connected;
- TimerHandle_t state_timer;
- uint32_t STA_duration;
- int32_t total_connected_time;
- int64_t last_connected;
- uint16_t num_disconnect;
- uint16_t retries;
- bool wifi_connected;
- esp_netif_t *wifi_netif;
- esp_netif_t *eth_netif;
- esp_netif_t *wifi_ap_netif;
- uint16_t sta_polling_min_ms;
- uint16_t sta_polling_max_ms;
- uint16_t ap_duration_ms;
- uint16_t eth_link_down_reboot_ms;
- uint16_t dhcp_timeout;
- uint16_t wifi_dhcp_fail_ms;
- queue_message * event_parameters;
- const char * timer_tag;
- } network_t;
- void network_start();
- network_t * network_get_state_machine();
- void network_event_simple(network_event_t trigger);
- void network_event(network_event_t trigger, void* param);
- void network_async_event(network_event_t trigger, void* param);
- void network_async(network_event_t trigger);
- void network_async_fail();
- void network_async_success();
- void network_async_link_up();
- void network_async_link_down();
- void network_async_configure();
- void network_async_got_ip();
- void network_async_timer();
- void network_async_start();
- void network_async_scan();
- void network_async_scan_done();
- void network_async_connect(const char * ssid, const char * password);
- void network_async_lost_connection(wifi_event_sta_disconnected_t * disconnected_event);
- void network_async_reboot(reboot_type_t rtype);
- void network_reboot_ota(char* url);
- void network_async_delete();
- void network_async_update_status();
- void network_async_eth_got_ip();
- void network_ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data);
- bool network_is_interface_connected(esp_netif_t * interface);
- #define MAX_SSID_SIZE 32
- #define MAX_PASSWORD_SIZE 64
- #define MAX_COMMAND_LINE_SIZE 201
- #define MAX_AP_NUM 15
- #define WIFI_MANAGER_MAX_RETRY CONFIG_WIFI_MANAGER_MAX_RETRY
- #define WIFI_MANAGER_TASK_PRIORITY CONFIG_WIFI_MANAGER_TASK_PRIORITY
- #define AP_AUTHMODE WIFI_AUTH_WPA2_PSK
- #define DEFAULT_AP_SSID_HIDDEN 0
- #define DEFAULT_AP_SSID CONFIG_DEFAULT_AP_SSID
- #define DEFAULT_AP_PASSWORD CONFIG_DEFAULT_AP_PASSWORD
- #define DEFAULT_AP_BANDWIDTH WIFI_BW_HT20
- #define DEFAULT_AP_CHANNEL CONFIG_DEFAULT_AP_CHANNEL
- #define DEFAULT_AP_IP CONFIG_DEFAULT_AP_IP
- #define DEFAULT_AP_GATEWAY CONFIG_DEFAULT_AP_GATEWAY
- #define DEFAULT_AP_NETMASK CONFIG_DEFAULT_AP_NETMASK
- #define DEFAULT_AP_MAX_CONNECTIONS CONFIG_DEFAULT_AP_MAX_CONNECTIONS
- #define DEFAULT_AP_BEACON_INTERVAL CONFIG_DEFAULT_AP_BEACON_INTERVAL
- #define DEFAULT_STA_ONLY 1
- #define DEFAULT_STA_POWER_SAVE WIFI_PS_MIN_MODEM
- void network_reboot_ota(char * url);
- typedef enum update_reason_code_t {
- UPDATE_CONNECTION_OK = 0,
- UPDATE_FAILED_ATTEMPT = 1,
- UPDATE_USER_DISCONNECT = 2,
- UPDATE_LOST_CONNECTION = 3,
- UPDATE_FAILED_ATTEMPT_AND_RESTORE = 4,
- UPDATE_ETHERNET_CONNECTED = 5
- }update_reason_code_t;
- void network_destroy();
- void filter_unique( wifi_ap_record_t * aplist, uint16_t * ap_num);
- char* network_status_alloc_get_ap_list_json();
- cJSON * network_manager_clear_ap_list_json(cJSON **old);
- esp_err_t network_manager_event_handler(void *ctx, system_event_t *event);
- cJSON * network_status_clear_ip_info_json(cJSON **old);
- cJSON * network_status_get_new_json(cJSON **old);
- void network_manager_initialise_mdns();
- bool network_is_wifi_prioritized();
- void network_set_timer(uint16_t duration, const char * tag);
- void network_set_hostname(esp_netif_t * netif);
- esp_err_t network_get_ip_info_for_netif(esp_netif_t* netif, tcpip_adapter_ip_info_t* ipInfo);
- void network_start_stop_dhcp_client(esp_netif_t* netif, bool start);
- void network_start_stop_dhcps(esp_netif_t* netif, bool start);
- void network_prioritize_wifi(bool activate);
- #define ADD_ROOT_FORWARD_DECLARATION(name, ...) ADD_STATE_FORWARD_DECLARATION_(name)
- #define ADD_ROOT_LEAF_FORWARD_DECLARATION(name, ...) ADD_STATE_FORWARD_DECLARATION_(name)
- #define ADD_LEAF_FORWARD_DECLARATION(name, ...) ADD_STATE_FORWARD_DECLARATION_(name)
- #define ADD_STATE_FORWARD_DECLARATION_(name) \
- static state_machine_result_t name##_handler(state_machine_t* const State_Machine); \
- static state_machine_result_t name##_entry_handler(state_machine_t* const State_Machine); \
- static state_machine_result_t name##_exit_handler(state_machine_t* const State_Machine);
- void initialize_network_handlers(state_machine_t* state_machine);
- void network_manager_format_from_to_states(esp_log_level_t level, const char* prefix, state_t const * from_state, state_t const* current_state, network_event_t event,bool show_source, const char * caller );
- void network_manager_format_state_machine(esp_log_level_t level, const char* prefix, state_machine_t * state_machine, bool show_source, const char * caller) ;
- char* network_manager_alloc_get_mac_string(uint8_t mac[6]);
- #if defined(LOG_LOCAL_LEVEL)
- #if LOG_LOCAL_LEVEL >=5
- #define NETWORK_PRINT_TRANSITION(begin, prefix, source,target, event, print_source,caller ) network_manager_format_from_to_states(ESP_LOG_VERBOSE, prefix, source,target, event, print_source,caller )
- #define NETWORK_DEBUG_STATE_MACHINE(begin, cb_prefix,state_machine,print_from,caller) network_manager_format_state_machine(ESP_LOG_DEBUG,cb_prefix,state_machine,print_from,caller)
- #define NETWORK_EXECUTE_CB(mch) network_execute_cb(mch,__FUNCTION__);
- #define network_handler_entry_print(State_Machine, begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"ENTRY START":"ENTRY END",State_Machine,false,__FUNCTION__)
- #define network_exit_handler_print(State_Machine, begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"EXIT START":"END END",State_Machine,false,__FUNCTION__)
- #define network_handler_print(State_Machine, begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"HANDLER START":"HANDLER END",State_Machine,false,__FUNCTION__)
- #elif LOG_LOCAL_LEVEL >= 4
- #define network_handler_entry_print(State_Machine, begin) if(begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"BEGIN ENTRY":"END ENTRY",State_Machine,false,"")
- #define network_exit_handler_print(State_Machine, begin) if(begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"BEGIN EXIT":"END EXIT",State_Machine,false,"")
- #define network_handler_print(State_Machine, begin) if(begin) network_manager_format_state_machine(ESP_LOG_DEBUG,begin?"HANDLER START":"HANDLER END",State_Machine,false,"")
- #define NETWORK_PRINT_TRANSITION(begin, prefix, source,target, event, print_source,caller ) if(begin) network_manager_format_from_to_states(ESP_LOG_DEBUG, prefix, source,target, event, print_source,caller )#define NETWORK_EXECUTE_CB(mch) network_execute_cb(mch,__FUNCTION__);
- #define NETWORK_DEBUG_STATE_MACHINE(begin, cb_prefix,state_machine,print_from,caller) if(begin) network_manager_format_state_machine(ESP_LOG_DEBUG,cb_prefix,state_machine,print_from,caller)
- #endif
- #endif
- #ifndef NETWORK_PRINT_TRANSITION
- #define network_exit_handler_print(nm, begin)
- #define network_handler_entry_print(State_Machine, begin)
- #define network_handler_print(State_Machine, begin)
- #define NETWORK_EXECUTE_CB(mch) network_execute_cb(mch,NULL)
- #define NETWORK_PRINT_TRANSITION(begin, prefix, source,target, event, print_source,caller )
- #define NETWORK_DEBUG_STATE_MACHINE(begin, cb_prefix,state_machine,print_from,caller)
- #endif
- #ifdef __cplusplus
- }
- #endif
|