diff --git a/support/kvm_system/main/include/config.h b/support/kvm_system/main/include/config.h index 528c86d..61aede8 100644 --- a/support/kvm_system/main/include/config.h +++ b/support/kvm_system/main/include/config.h @@ -67,6 +67,7 @@ typedef struct { char wifi_ap_pass[9] = {0}; uint8_t oled_sleep_state = 0; // 0:wakeup; 1:sleep; int8_t reconvery_update = 0; // 0:Undetected; 1:Needs Update; 2:Update finish; -1:not need to update + uint8_t ping_allow = 1; } kvm_sys_state_t; typedef struct { diff --git a/support/kvm_system/main/lib/system_state/system_state.cpp b/support/kvm_system/main/lib/system_state/system_state.cpp index e7069b1..de3b4b1 100644 --- a/support/kvm_system/main/lib/system_state/system_state.cpp +++ b/support/kvm_system/main/lib/system_state/system_state.cpp @@ -36,6 +36,15 @@ int get_nic_state(const char* interface_name) return ret; } +int get_ping_allow_state() +{ + if(access("/etc/kvm/stop_ping", F_OK) == 0) { + kvm_sys_state.ping_allow = 0; + } else { + kvm_sys_state.ping_allow = 1; + } +} + // net_port int get_ip_addr(ip_addr_t ip_type) { @@ -354,16 +363,21 @@ void kvm_update_eth_state(void) return; } } - // ping route - if(kvm_sys_state.eth_route[0] == 0){ - get_ip_addr(ETH_ROUTE); - } else { - if(chack_net_state(ETH_ROUTE)){ - // 网络通 - kvm_sys_state.eth_state = 3; + if(kvm_sys_state.ping_allow){ + // ping route + if(kvm_sys_state.eth_route[0] == 0){ + get_ip_addr(ETH_ROUTE); } else { - kvm_sys_state.eth_state = 2; + if(chack_net_state(ETH_ROUTE)){ + // Ping successful + kvm_sys_state.eth_state = 3; + } else { + kvm_sys_state.eth_state = 2; + } } + } else { + // Consider the network to be connected + kvm_sys_state.eth_state = 3; } } else { @@ -374,40 +388,47 @@ void kvm_update_eth_state(void) void kvm_update_wifi_state(void) { - // 无wifi模块(检测存在?)->有模块&未联网(检测是否联网)-> + // No WiFi module (check for existence?) -> Module exists & not connected (check if connected) -> if(kvm_sys_state.wifi_state == -2) return; switch (kvm_sys_state.wifi_state){ case -1: - // 初始缺省值 + // Initial default value. if (kvm_wifi_exist()) { kvm_sys_state.wifi_state = 0; system("touch /etc/kvm/wifi_exist"); } else { - kvm_sys_state.wifi_state = -2; // 不存在wifi模块,直接跳出 + kvm_sys_state.wifi_state = -2; // WiFi module does not exist, exiting directly. system("rm /etc/kvm/wifi_exist"); return; } - // break; // 直接开始检测联网 + // break; // Start checking the connection directly. case 0: - // 存在WiFi&未联网 + // WiFi is available but not connected. system("echo 0 > /kvmapp/kvm/wifi_state"); if (get_ip_addr(WiFi_IP) && get_ip_addr(WiFi_ROUTE)){ - // 已获取ip+route - if (chack_net_state(WiFi_ROUTE)){ - // ping 通 + // IP+Route has been acquired + if(kvm_sys_state.ping_allow){ + if (chack_net_state(WiFi_ROUTE)){ + // Ping successful + kvm_sys_state.wifi_state = 1; + } + } else { + // Consider the network to be connected kvm_sys_state.wifi_state = 1; } } break; case 1: - // 已联网&持续检测是否能ping通 + // Connected to the network & continuously checking if it can ping successfully. system("echo 1 > /kvmapp/kvm/wifi_state"); get_ip_addr(WiFi_IP); - if (kvm_sys_state.wifi_route[0] != 0){ - if (chack_net_state(WiFi_ROUTE) == 0){ - // ping 通 - kvm_sys_state.wifi_state = 0; + if(kvm_sys_state.ping_allow){ + if (kvm_sys_state.wifi_route[0] != 0){ + if (chack_net_state(WiFi_ROUTE) == 0){ + // Ping successful + kvm_sys_state.wifi_state = 0; + } } } // default: diff --git a/support/kvm_system/main/lib/system_state/system_state.h b/support/kvm_system/main/lib/system_state/system_state.h index fbcae30..9ebf393 100644 --- a/support/kvm_system/main/lib/system_state/system_state.h +++ b/support/kvm_system/main/lib/system_state/system_state.h @@ -16,10 +16,11 @@ enum ip_addr_t // net_port int get_ip_addr(ip_addr_t ip_type); int chack_net_state(ip_addr_t use_ip_type); +int get_ping_allow_state(void); void patch_eth_wifi(void); -int kvm_wifi_exist(); -void kvm_update_usb_state(); -void kvm_update_hdmi_state(); +int kvm_wifi_exist(void); +void kvm_update_usb_state(void); +void kvm_update_hdmi_state(void); void kvm_update_stream_fps(void); void kvm_update_stream_type(void); void kvm_update_stream_qlty(void); diff --git a/support/kvm_system/main/src/main.cpp b/support/kvm_system/main/src/main.cpp index 31c010d..96a42a0 100644 --- a/support/kvm_system/main/src/main.cpp +++ b/support/kvm_system/main/src/main.cpp @@ -144,6 +144,7 @@ void* thread_key_handle(void * arg) void* thread_sys_handle(void * arg) { + get_ping_allow_state(); while(kvm_sys_state.sys_thread_running) { // printf("[kvmsys]main while start!\n");