static int btn_check_wps(void) { unsigned int i_button_value = !BTN_PRESSED; #if defined (BOARD_GPIO_BTN_RESET) /* check RESET pressed */ if (btn_count_reset > 0) return 0; #endif #if defined (BOARD_GPIO_BTN_WLTOG) /* check WLTOG pressed */ if (btn_count_wlt > 0) return 0; #endif if (cpu_gpio_get_pin(BOARD_GPIO_BTN_WPS, &i_button_value) < 0) return 0; if (i_button_value == BTN_PRESSED) { /* WPS pressed */ btn_count_wps++; #if defined (BOARD_GPIO_LED_POWER) /* flash power LED */ if (btn_count_wps > BTN_EZ_WAIT_COUNT) { int i_led = get_state_led_pwr(); cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, (btn_count_wps % 2) ? i_led : !i_led); } #endif } else { /* WPS released */ int press_count = btn_count_wps; btn_count_wps = 0; if (press_count > BTN_EZ_WAIT_COUNT) { /* pressed >= 3sec */ wd_alarmtimer(0, 0); ez_event_long(0); } else if (press_count > 0 && press_count < BTN_EZ_CANCEL_COUNT) { /* pressed < 500ms */ wd_alarmtimer(0, 0); ez_event_short(0); } } return (i_button_value != BTN_PRESSED) ? 0 : 1; }
static void btn_check_ez(void) { #if defined(BTN_WPS) int i_front_leds, i_led0, i_led1; unsigned int i_button_value = 1; // check RESET pressed if (btn_pressed_reset != 0) return; if (cpu_gpio_get_pin(BTN_WPS, &i_button_value) < 0) return; if (!i_button_value) { // WPS pressed i_front_leds = nvram_get_int("front_leds"); if (i_front_leds == 2 || i_front_leds == 4) { // POWER always OFF i_led0 = LED_ON; i_led1 = LED_OFF; } else { // POWER always ON i_led0 = LED_OFF; i_led1 = LED_ON; } if (btn_pressed_wps == 0) { btn_pressed_wps = 1; btn_count_wps = 0; alarmtimer(0, URGENT_PERIOD); // toggle power LED cpu_gpio_set_pin(LED_POWER, i_led0); } else { if (++btn_count_wps > WPS_WAIT_COUNT) { btn_pressed_wps = 2; } if (btn_pressed_wps == 2) { // flash power LED if (btn_count_wps % 2) cpu_gpio_set_pin(LED_POWER, i_led1); else cpu_gpio_set_pin(LED_POWER, i_led0); } } } else { // WPS released if (btn_pressed_wps == 1) { btn_pressed_wps = 0; btn_count_wps = 0; // pressed < 3sec ez_event_short(); } else if (btn_pressed_wps == 2) { btn_pressed_wps = 0; btn_count_wps = 0; // pressed >= 3sec ez_event_long(); } } #endif }
static void nvram_convert_misc_values(void) { char buff[64]; int sw_mode; #if defined (BOARD_GPIO_BTN_ROUTER) int i_router_switch = BTN_PRESSED; if (cpu_gpio_get_pin(BOARD_GPIO_BTN_ROUTER, &i_router_switch) >= 0) { if (i_router_switch != BTN_PRESSED) nvram_set_int("sw_mode", 3); } #endif /* check router mode */ sw_mode = nvram_get_int("sw_mode"); if (sw_mode == 1) { /* Internet gateway mode */ nvram_set_int("wan_nat_x", 1); nvram_set("wan_route_x", "IP_Routed"); } else if (sw_mode == 4) { /* Pure router mode */ nvram_set_int("wan_nat_x", 0); nvram_set("wan_route_x", "IP_Routed"); } else if (sw_mode == 3) { /* AP mode (Ethernet convertor) */ nvram_set_int("wan_nat_x", 0); nvram_set("wan_route_x", "IP_Bridged"); } else { sw_mode = 1; nvram_set_int("sw_mode", 1); nvram_set_int("wan_nat_x", 1); nvram_set("wan_route_x", "IP_Routed"); } #if defined (BOARD_GPIO_LED_ROUTER) if (sw_mode != 3) LED_CONTROL(BOARD_GPIO_LED_ROUTER, LED_ON); #endif #if BOARD_HAS_5G_RADIO if (strlen(nvram_wlan_get(1, "ssid")) < 1) nvram_wlan_set(1, "ssid", DEF_WLAN_5G_SSID); memset(buff, 0, sizeof(buff)); char_to_ascii(buff, nvram_wlan_get(1, "ssid")); nvram_wlan_set(1, "ssid2", buff); if (strlen(nvram_wlan_get(1, "wpa_mode")) < 1) nvram_wlan_set_int(1, "wpa_mode", 0); #if BOARD_HAS_5G_11AC if (strlen(nvram_wlan_get(1, "gmode")) < 1) nvram_wlan_set_int(1, "gmode", 4); // a/n/ac Mixed if (nvram_wlan_get_int(1, "HT_BW") > 2) nvram_wlan_set_int(1, "HT_BW", 2); #else if (strlen(nvram_wlan_get(1, "gmode")) < 1) nvram_wlan_set_int(1, "gmode", 2); // a/n Mixed if (nvram_wlan_get_int(1, "HT_BW") > 1) nvram_wlan_set_int(1, "HT_BW", 1); #endif if (nvram_wlan_get_int(1, "stream_tx") > BOARD_NUM_ANT_5G_TX) nvram_wlan_set_int(1, "stream_tx", BOARD_NUM_ANT_5G_TX); if (nvram_wlan_get_int(1, "stream_rx") > BOARD_NUM_ANT_5G_RX) nvram_wlan_set_int(1, "stream_rx", BOARD_NUM_ANT_5G_RX); #endif if (strlen(nvram_wlan_get(0, "ssid")) < 1) nvram_wlan_set(0, "ssid", DEF_WLAN_2G_SSID); memset(buff, 0, sizeof(buff)); char_to_ascii(buff, nvram_wlan_get(0, "ssid")); nvram_wlan_set(0, "ssid2", buff); if (strlen(nvram_wlan_get(0, "gmode")) < 1) nvram_wlan_set_int(0, "gmode", 2); // b/g/n Mixed if (nvram_wlan_get_int(0, "HT_BW") > 1) nvram_wlan_set_int(0, "HT_BW", 1); if (nvram_wlan_get_int(0, "stream_tx") > BOARD_NUM_ANT_2G_TX) nvram_wlan_set_int(0, "stream_tx", BOARD_NUM_ANT_2G_TX); if (nvram_wlan_get_int(0, "stream_rx") > BOARD_NUM_ANT_2G_RX) nvram_wlan_set_int(0, "stream_rx", BOARD_NUM_ANT_2G_RX); nvram_set_temp("ntpc_counter", "0000000000"); nvram_set_temp("login_timestamp", "0000000000"); nvram_set_int_temp("networkmap_fullscan", 0); nvram_set_int_temp("link_internet", 2); nvram_set_int_temp("link_wan", 0); nvram_set_int_temp("reload_svc_wl", 0); nvram_set_int_temp("reload_svc_rt", 0); nvram_set_int_temp("usb_hotplug_ms", 0); nvram_set_int_temp("usb_hotplug_lp", 0); nvram_set_int_temp("usb_hotplug_md", 0); nvram_set_int_temp("usb_unplug_lp", 0); nvram_set_int_temp("usb_unplug_md", 0); nvram_set_int_temp("usb_opt_start", 0); nvram_set_int_temp("l2tp_wan_t", 0); nvram_set_int_temp("l2tp_cli_t", 0); nvram_set_int_temp("l2tp_srv_t", 0); nvram_set_int_temp("vpnc_state_t", 0); nvram_set_temp("deferred_wanup_t", "0000000000"); nvram_set_temp("vpnc_dns_t", ""); nvram_set_temp("vpnc_dom_t", ""); nvram_set_temp("viptv_ifname", ""); nvram_set_temp(RSTATS_NVKEY_24, (sw_mode != 3) ? IFDESC_WAN : IFDESC_LAN); nvram_set_temp(RSTATS_NVKEY_DM, IFDESC_WAN); /* setup wan0 variables */ set_wan0_vars(); set_wan_unit_value(0, "uptime", "0000000000"); set_wan_unit_value(0, "dltime", "0000000000"); set_wan_unit_value(0, "bytes_rx", "00000000000000000000"); set_wan_unit_value(0, "bytes_tx", "00000000000000000000"); set_wan_unit_value(0, "ifname_t", ""); set_usb_modem_dev_wan(0, 0); reset_wan_vars(); /* setup lan variables */ reset_lan_vars(); reset_lan_temp(); time_zone_x_mapping(); }
static void btn_check_reset(void) { unsigned int i_button_value = 1; #if defined(BTN_WPS) // check WPS pressed if (btn_pressed_wps != 0) return; #endif if (cpu_gpio_get_pin(BTN_RESET, &i_button_value) < 0) return; // reset button is on low phase if (!i_button_value) { // "RESET" pressed if (!btn_pressed_reset) { btn_pressed_reset = 1; btn_count_reset = 0; alarmtimer(0, URGENT_PERIOD); } else { /* Whenever it is pushed steady */ if (++btn_count_reset > RESET_WAIT_COUNT) { dbg("You can release RESET button now!\n"); btn_pressed_reset = 2; } if (btn_pressed_reset == 2) { if (btn_count_reset % 2) cpu_gpio_set_pin(LED_POWER, LED_OFF); else cpu_gpio_set_pin(LED_POWER, LED_ON); } } } else { // "RESET" released if (btn_pressed_reset == 1) { // pressed < 5sec, cancel btn_count_reset = 0; btn_pressed_reset = 0; LED_CONTROL(LED_POWER, LED_ON); alarmtimer(NORMAL_PERIOD, 0); } else if (btn_pressed_reset == 2) { // pressed >= 5sec, reset! LED_CONTROL(LED_POWER, LED_OFF); alarmtimer(0, 0); erase_nvram(); erase_storage(); sys_exit(); } } }