コード例 #1
0
ファイル: watchdog.c プロジェクト: eckyecky/rt-n56u
void 
ez_event_long(void)
{
	int ez_action = nvram_get_int("ez_action_long");
	switch (ez_action)
	{
	case 7:
	case 8:
		alarmtimer(0, 0);
		LED_CONTROL(LED_POWER, LED_OFF);
		break;
	default:
		alarmtimer(NORMAL_PERIOD, 0);
		LED_CONTROL(LED_POWER, LED_ON);
		break;
	}
	
	switch (ez_action)
	{
	case 1: // WiFi 2.4GHz force ON/OFF trigger
		ez_action_force_toggle_wifi24();
		break;
	case 2: // WiFi 5GHz force ON/OFF trigger
		ez_action_force_toggle_wifi5();
		break;
	case 3: // WiFi 2.4 and 5GHz force ON/OFF trigger
		ez_action_force_toggle_wifi24();
		ez_action_force_toggle_wifi5();
		break;
	case 4: // Safe removal all USB
		ez_action_usb_saferemoval();
		break;
	case 5: // WAN down
		ez_action_wan_down();
		break;
	case 6: // WAN reconnect
		ez_action_wan_reconnect();
		break;
	case 7: // Router reboot
		sys_exit();
		break;
	case 8: // Router shutdown prepare
		ez_action_shutdown();
		break;
	case 9: // WAN up/down toggle
		ez_action_wan_toggle();
		break;
	case 10: // Run user script (/opt/bin/on_wps.sh 2)
		ez_action_user_script(2);
		break;
	case 11: // Front LED toggle
		ez_action_led_toggle();
		break;
	}
}
コード例 #2
0
ファイル: watchdog.c プロジェクト: jing-git/rt-n56u
static int
btn_check_reset(void)
{
    unsigned int i_button_value = !BTN_PRESSED;
#if defined (BOARD_GPIO_LED_POWER)
    int i_led;
#endif

#if defined (BOARD_GPIO_BTN_WPS)
    /* check WPS pressed */
    if (btn_count_wps > 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_RESET, &i_button_value) < 0)
        return 0;

    if (i_button_value == BTN_PRESSED) {
        /* "RESET" pressed */
        btn_count_reset++;

#if defined (BOARD_GPIO_LED_POWER)
        /* flash power LED */
        i_led = get_state_led_pwr();
        if (btn_count_reset == 1)
            cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, i_led);
        else if (btn_count_reset > BTN_RESET_WAIT_COUNT) {
            cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, (btn_count_reset % 2) ? !i_led : i_led);
            dbg("You can release RESET button now!\n");
        }
#endif
    } else {
        /* "RESET" released */
        int press_count = btn_count_reset;
        btn_count_reset = 0;

        if (press_count > BTN_RESET_WAIT_COUNT) {
            /* pressed >= 5sec, reset! */
            wd_alarmtimer(0, 0);
#if defined (BOARD_GPIO_LED_POWER)
            cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, LED_OFF);
#endif
            erase_nvram();
            erase_storage();
            sys_exit();
        } else if (press_count > 0) {
#if defined (BOARD_GPIO_LED_POWER)
            LED_CONTROL(BOARD_GPIO_LED_POWER, LED_ON);
#endif
        }
    }

    return (i_button_value != BTN_PRESSED) ? 0 : 1;
}
コード例 #3
0
ファイル: rc.c プロジェクト: ff94315/rt-n56u
void
shutdown_router(int use_reboot)
{
	int is_ap_mode = get_ap_mode();

	stop_misc();
	stop_services(1);

#if (BOARD_NUM_USB_PORTS > 0)
	stop_usb_printer_spoolers();
	safe_remove_usb_device(0, NULL, !use_reboot);
#endif
#if defined (BOARD_GPIO_LED_USB)
	LED_CONTROL(BOARD_GPIO_LED_USB, LED_OFF);
#endif

	stop_wan();
	stop_services_lan_wan();
	set_ipv4_forward(0);
#if defined (BOARD_GPIO_LED_WAN)
	LED_CONTROL(BOARD_GPIO_LED_WAN, LED_OFF);
#endif

	storage_save_time(10);
	write_storage_to_mtd();

	stop_8021x_all();
	stop_wifi_all_wl();
	stop_wifi_all_rt();
	stop_logger();
	stop_lan(is_ap_mode);

	umount_rwfs_partition();

#if defined (BOARD_GPIO_LED_LAN)
	LED_CONTROL(BOARD_GPIO_LED_LAN, LED_OFF);
#endif
#if defined (BOARD_GPIO_LED_POWER)
	LED_CONTROL(BOARD_GPIO_LED_POWER, LED_OFF);
#endif

	if (!use_reboot)
		module_smart_unload("rt_timer_wdg", 0);
}
コード例 #4
0
ファイル: watchdog.c プロジェクト: eckyecky/rt-n56u
void 
ez_event_short(void)
{
	int ez_action = nvram_get_int("ez_action_short");
	
	alarmtimer(NORMAL_PERIOD, 0);
	LED_CONTROL(LED_POWER, LED_ON);
	
	switch (ez_action)
	{
	case 1: // WiFi radio ON/OFF trigger
		ez_action_toggle_wifi24();
		ez_action_toggle_wifi5();
		break;
	case 2: // WiFi 2.4GHz force ON/OFF trigger
		ez_action_force_toggle_wifi24();
		break;
	case 3: // WiFi 5GHz force ON/OFF trigger
		ez_action_force_toggle_wifi5();
		break;
	case 4: // WiFi 2.4 and 5GHz force ON/OFF trigger
		ez_action_force_toggle_wifi24();
		ez_action_force_toggle_wifi5();
		break;
	case 5: // Safe removal all USB
		ez_action_usb_saferemoval();
		break;
	case 6: // WAN down
		ez_action_wan_down();
		break;
	case 7: // WAN reconnect
		ez_action_wan_reconnect();
		break;
	case 8: // WAN up/down toggle
		ez_action_wan_toggle();
		break;
	case 9: // Run user script (/opt/bin/on_wps.sh 1)
		ez_action_user_script(1);
		break;
	case 10: // Front LED toggle
		ez_action_led_toggle();
		break;
	}
}
コード例 #5
0
ファイル: rc.c プロジェクト: clockzhong/RouterN56U
static void
init_gpio_leds_buttons(void)
{
#if defined (BOARD_GPIO_LED_WAN)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_WAN, 1);
	LED_CONTROL(BOARD_GPIO_LED_WAN, LED_OFF);
#endif
#if defined (BOARD_GPIO_LED_LAN)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_LAN, 1);
	LED_CONTROL(BOARD_GPIO_LED_LAN, LED_OFF);
#endif
#if defined (BOARD_GPIO_LED_USB)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_USB, 1);
	LED_CONTROL(BOARD_GPIO_LED_USB, LED_OFF);
#endif
#if defined (BOARD_GPIO_LED_ALL)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_ALL, 1);
	LED_CONTROL(BOARD_GPIO_LED_ALL, LED_ON);
#endif
#if defined (BOARD_GPIO_LED_WIFI)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_WIFI, 1);
	LED_CONTROL(BOARD_GPIO_LED_WIFI, LED_ON);
#endif
#if defined (BOARD_GPIO_LED_POWER)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_POWER, 1);
	LED_CONTROL(BOARD_GPIO_LED_POWER, LED_ON);
#endif

#if defined (BOARD_GPIO_BTN_RESET)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_RESET, 0);
#endif
#if defined (BOARD_GPIO_BTN_WPS)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_WPS, 0);
#endif
#if defined (BOARD_GPIO_BTN_WLTOG)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_WLTOG, 0);
#endif
}
コード例 #6
0
ファイル: watchdog.c プロジェクト: jing-git/rt-n56u
void
ez_event_long(int btn_id)
{
    int ez_action, ez_param = 2;

#if defined (BOARD_GPIO_BTN_WLTOG)
    if (btn_id == 1) {
        ez_action = nvram_get_int("wlt_action_long");
        ez_param = 4;
    } else
#endif
        ez_action = nvram_get_int("ez_action_long");

#if defined (BOARD_GPIO_LED_POWER)
    int led_state = LED_ON;

    switch (ez_action)
    {
    case 7: // Router reboot
    case 8: // Router shutdown
        led_state = LED_OFF;
        break;
    case 11: // Front LED toggle
        led_state = -1;
        break;
    }

    if (led_state >= 0)
        LED_CONTROL(BOARD_GPIO_LED_POWER, led_state);
#endif

    switch (ez_action)
    {
    case 1: // WiFi 2.4GHz force Enable/Disable trigger
        ez_action_change_wifi2();
        break;
    case 2: // WiFi 5GHz force Enable/Disable trigger
        ez_action_change_wifi5();
        break;
    case 3: // WiFi 2.4 & 5GHz force Enable/Disable trigger
        ez_action_change_wifi2();
        ez_action_change_wifi5();
        break;
    case 4: // Safe removal all USB
        ez_action_usb_saferemoval();
        break;
    case 5: // WAN down
        ez_action_wan_down();
        break;
    case 6: // WAN reconnect
        ez_action_wan_reconnect();
        break;
    case 7: // Router reboot
        sys_exit();
        break;
    case 8: // Router shutdown
        ez_action_shutdown();
        break;
    case 9: // WAN up/down toggle
        ez_action_wan_toggle();
        break;
    case 10: // Run user script
        ez_action_user_script(ez_param);
        break;
    case 11: // Front LED toggle
        ez_action_led_toggle();
        break;
    case 12: // WiFi AP Guest 2.4GHz Enable/Disable trigger
        ez_action_change_guest_wifi2();
        break;
    case 13: // WiFi AP Guest 5GHz Enable/Disable trigger
        ez_action_change_guest_wifi5();
        break;
    case 14: // WiFi AP Guest 2.4 & 5GHz Enable/Disable trigger
        ez_action_change_guest_wifi2();
        ez_action_change_guest_wifi5();
        break;
    case 15: // Reset settings
        erase_nvram();
        erase_storage();
        sys_exit();
        break;
    }
}
コード例 #7
0
ファイル: watchdog.c プロジェクト: jing-git/rt-n56u
void
ez_event_short(int btn_id)
{
    int ez_action, ez_param = 1;

#if defined (BOARD_GPIO_BTN_WLTOG)
    if (btn_id == 1) {
        ez_action = nvram_get_int("wlt_action_short");
        ez_param = 3;
    } else
#endif
        ez_action = nvram_get_int("ez_action_short");

#if defined (BOARD_GPIO_LED_POWER)
    cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, get_state_led_pwr());
    if (ez_action != 10) {
        usleep(80000);
        LED_CONTROL(BOARD_GPIO_LED_POWER, LED_ON);
    }
#endif

    switch (ez_action)
    {
    case 1: // WiFi radio ON/OFF trigger
        ez_action_toggle_wifi2();
        ez_action_toggle_wifi5();
        break;
    case 2: // WiFi 2.4GHz force Enable/Disable trigger
        ez_action_change_wifi2();
        break;
    case 3: // WiFi 5GHz force Enable/Disable trigger
        ez_action_change_wifi5();
        break;
    case 4: // WiFi 2.4 & 5GHz force Enable/Disable trigger
        ez_action_change_wifi2();
        ez_action_change_wifi5();
        break;
    case 5: // Safe removal all USB
        ez_action_usb_saferemoval();
        break;
    case 6: // WAN down
        ez_action_wan_down();
        break;
    case 7: // WAN reconnect
        ez_action_wan_reconnect();
        break;
    case 8: // WAN up/down toggle
        ez_action_wan_toggle();
        break;
    case 9: // Run user script
        ez_action_user_script(ez_param);
        break;
    case 10: // Front LED toggle
        ez_action_led_toggle();
        break;
    case 11: // WiFi AP Guest 2.4GHz Enable/Disable trigger
        ez_action_change_guest_wifi2();
        break;
    case 12: // WiFi AP Guest 5GHz Enable/Disable trigger
        ez_action_change_guest_wifi5();
        break;
    case 13: // WiFi AP Guest 2.4 & 5GHz Enable/Disable trigger
        ez_action_change_guest_wifi2();
        ez_action_change_guest_wifi5();
        break;
    }
}
コード例 #8
0
ファイル: rc.c プロジェクト: ff94315/rt-n56u
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();
}
コード例 #9
0
ファイル: rc.c プロジェクト: ff94315/rt-n56u
static void
init_gpio_leds_buttons(void)
{
	/* hide WiFi 2G soft-led  */
#if defined (BOARD_GPIO_LED_SW2G)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_SW2G, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_SW2G, LED_OFF);
	cpu_gpio_led_set(BOARD_GPIO_LED_SW2G, LED_BLINK_STAY_SHOW);
#endif
	/* hide WiFi 5G soft-led  */
#if defined (BOARD_GPIO_LED_SW5G) && (!defined (BOARD_GPIO_LED_SW2G) || (BOARD_GPIO_LED_SW5G != BOARD_GPIO_LED_SW2G))
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_SW5G, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_SW5G, LED_OFF);
	cpu_gpio_led_set(BOARD_GPIO_LED_SW5G, LED_BLINK_STAY_SHOW);
#endif
	/* hide WAN soft-led  */
#if defined (BOARD_GPIO_LED_WAN)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_WAN, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_WAN, LED_OFF);
#endif
	/* hide LAN soft-led  */
#if defined (BOARD_GPIO_LED_LAN)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_LAN, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_LAN, LED_OFF);
#endif
	/* hide USB soft-led  */
#if defined (BOARD_GPIO_LED_USB)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_USB, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_USB, LED_OFF);
	cpu_gpio_led_set(BOARD_GPIO_LED_USB, LED_BLINK_STAY_HIDE);
#endif
	/* hide ROUTER soft-led  */
#if defined (BOARD_GPIO_LED_ROUTER)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_ROUTER, 1);
	cpu_gpio_set_pin(BOARD_GPIO_LED_ROUTER, LED_OFF);
#endif
	/* enable common led trigger */
#if defined (BOARD_GPIO_LED_ALL)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_ALL, 1);
	LED_CONTROL(BOARD_GPIO_LED_ALL, LED_ON);
#endif
	/* allow WiFi hw-led  */
#if defined (BOARD_GPIO_LED_WIFI)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_WIFI, 1);
	LED_CONTROL(BOARD_GPIO_LED_WIFI, LED_ON);
#endif
	/* show PWR soft-led  */
#if defined (BOARD_GPIO_LED_POWER)
	cpu_gpio_set_pin_direction(BOARD_GPIO_LED_POWER, 1);
	LED_CONTROL(BOARD_GPIO_LED_POWER, LED_ON);
#endif
	/* enable USB port 5V power */
#if defined (BOARD_GPIO_PWR_USB)
	cpu_gpio_set_pin_direction(BOARD_GPIO_PWR_USB, 1);
	cpu_gpio_set_pin(BOARD_GPIO_PWR_USB, BOARD_GPIO_PWR_USB_ON);
#endif
#if defined (BOARD_GPIO_PWR_USB2)
	cpu_gpio_set_pin_direction(BOARD_GPIO_PWR_USB2, 1);
	cpu_gpio_set_pin(BOARD_GPIO_PWR_USB2, BOARD_GPIO_PWR_USB_ON);
#endif

	/* init BTN Reset  */
#if defined (BOARD_GPIO_BTN_RESET)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_RESET, 0);
#endif
	/* init BTN WPS  */
#if defined (BOARD_GPIO_BTN_WPS)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_WPS, 0);
#endif
	/* init BTN FN1  */
#if defined (BOARD_GPIO_BTN_FN1)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_FN1, 0);
#endif
	/* init BTN FN2  */
#if defined (BOARD_GPIO_BTN_FN2)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_FN2, 0);
#endif
	/* init BTN ROUTER  */
#if defined (BOARD_GPIO_BTN_ROUTER)
	cpu_gpio_set_pin_direction(BOARD_GPIO_BTN_ROUTER, 0);
#endif
}
コード例 #10
0
void btn_check(void)
{
#ifdef BTN_SETUP
	if (btn_pressed_setup == BTNSETUP_NONE)
	{
#endif

#ifdef SR3
	if (!ralink_gpio_read_bit(BTN_RESET))	// reset button is on low phase
#else
	if (0)
#endif
	{
	/*--------------- Add BTN_RST MFG test ------------------------*/
		if (!nvram_match("asus_mfg", "0"))
		{
			nvram_set("btn_rst", "1");
		}
		else
		{
			if (!btn_pressed)
			{
				btn_pressed = 1;
				btn_count = 0;
				alarmtimer(0, URGENT_PERIOD);
			}
			else
			{	/* Whenever it is pushed steady */
				if (++btn_count > RESET_WAIT_COUNT)
				{
					dbg("You can release RESET button now!\n");

					btn_pressed = 2;
				}
				if (btn_pressed == 2)
				{
				/* 0123456789 */
				/* 0011100111 */
					if ((btn_count % 10) < 1 || ((btn_count % 10) > 4 && (btn_count % 10) < 7))
						LED_CONTROL(LED_POWER, LED_OFF);
					else
						LED_CONTROL(LED_POWER, LED_ON);
				}
			}
		} // end BTN_RST MFG test
	}
	else
	{
		if (btn_pressed == 1)
		{
			btn_count = 0;
			btn_pressed = 0;
			LED_CONTROL(LED_POWER, LED_ON);
			alarmtimer(NORMAL_PERIOD, 0);
		}
		else if (btn_pressed == 2)
		{
			LED_CONTROL(LED_POWER, LED_OFF);
			alarmtimer(0, 0);
			system("erase /dev/mtd1");
//			kill(1, SIGTERM);
			sys_exit();
		}
	}

#ifdef BTN_SETUP
	}
	if (btn_pressed != 0) return;

	if (btn_pressed_setup < BTNSETUP_START)
	{
		if (!ralink_gpio_read_bit(BTN_WPS) && !no_need_to_start_wps(0))
		{
			/* Add BTN_EZ MFG test */
			if (!nvram_match("asus_mfg", "0"))
			{
				nvram_set("btn_ez", "1");
			}
			else
			{
				if (btn_pressed_setup == BTNSETUP_NONE)
				{
					btn_pressed_setup = BTNSETUP_DETECT;
					btn_count_setup = 0;
					alarmtimer(0, RUSHURGENT_PERIOD);
				}
				else
				{	/* Whenever it is pushed steady */
					if (++btn_count_setup > SETUP_WAIT_COUNT)
					{
						if (!nvram_match("sw_mode_ex", "3"))
						{
							stop_wsc();
							stop_wsc_2g();
							nvram_set("wps_enable", "0");

#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
							nvram_set("wps_triggered", "1");	// psp fix
#endif

							btn_pressed_setup = BTNSETUP_START;
							btn_count_setup = 0;
							btn_count_setup_second = 0;
#if defined (W7_LOGO) || defined (WIFI_LOGO)
							if (nvram_match("wps_band", "0"))
								start_wsc_pbc();
							else
								start_wsc_pbc_2g();
#else
#if 0
							start_wsc_pbc_both();
#else
							nvram_set("wps_band", "1");
							start_wsc_pbc_2g();
#endif
#endif
							WscStatus_old = -1;
							WscStatus_old_2g = -1;
							wsc_timeout = 120*20;
						}
					}
				}
			} // end BTN_EZ MFG test
		} 
		else if (btn_pressed_setup == BTNSETUP_DETECT)
		{
			btn_pressed_setup = BTNSETUP_NONE;
			btn_count_setup = 0;
			LED_CONTROL(LED_POWER, LED_ON);
			alarmtimer(NORMAL_PERIOD, 0);
		}
	}
	else 
	{
		if (!ralink_gpio_read_bit(BTN_WPS) && !no_need_to_start_wps(0))
		{
			/* Whenever it is pushed steady, again... */
			if (++btn_count_setup_second > SETUP_WAIT_COUNT)
			{
				if (!nvram_match("sw_mode_ex", "3"))
				{
					stop_wsc();
					stop_wsc_2g();
					nvram_set("wps_enable", "0");

#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
					nvram_set("wps_triggered", "1");	// psp fix
#endif
					dbg("pushed again...\n");
					btn_pressed_setup = BTNSETUP_START;
					btn_count_setup_second = 0;
#if defined (W7_LOGO) || defined (WIFI_LOGO)
					if (nvram_match("wps_band", "0"))
						start_wsc_pbc();
					else
						start_wsc_pbc_2g();
#else
#if 0
					start_wsc_pbc_both();
#else
					nvram_set("wps_band", "1");
					start_wsc_pbc_2g();
#endif
#endif
					WscStatus_old = -1;
					WscStatus_old_2g = -1;
					wsc_timeout = 120*20;
				}
#if 0
				else
				{
					dbg("pushed again... do nothing...\n");
/*
					btn_pressed_setup = BTNSETUP_START;
					btn_count_setup_second = 0;
					sta_wps_pbc();
					wsc_timeout = 120*20;
*/
				}
#endif
			}
		}

		struct _WSC_CONFIGURED_VALUE wsc_value;
		int int_stop_wps_led = 0;
		int WscStatus = -1;
		int WscStatus_2g = -1;

		if (nvram_match("wps_mode", "1"))	// PIN
		{
			if (nvram_match("wps_band", "0"))
				WscStatus = getWscStatus();
			else
				WscStatus = getWscStatus_2g();
		}
		else					// PBC
		{
			WscStatus = getWscStatus();
			WscStatus_2g = getWscStatus_2g();
		}
		
		if (WscStatus_old != WscStatus)
		{
			WscStatus_old = WscStatus;
			dbg("WscStatus: %d\n", WscStatus);
		}

		if (nvram_match("wps_mode", "2") && WscStatus_old_2g != WscStatus_2g)
		{
			WscStatus_old_2g = WscStatus_2g;
			dbg("WscStatus_2g: %d\n", WscStatus_2g);
		}

		if (WscStatus == 2 || WscStatus_2g == 2)// Wsc Process failed
		{
			if (g_isEnrollee)
				;			// go on monitoring
			else
			{
				int_stop_wps_led = 1;
				dbg("%s", "Error occured. Is the PIN correct?\n");
			}
		}

		// Driver 1.9 supports AP PBC Session Overlapping Detection.
		if (WscStatus == 0x109 /* PBC_SESSION_OVERLAP */ || WscStatus_2g == 0x109)
		{
			dbg("PBC_SESSION_OVERLAP\n");
			int_stop_wps_led = 1;
		}

		if (nvram_match("wps_mode", "1"))	// PIN
		{
			if (WscStatus == 34 /* Configured*/)
			{
/*
				dbg("getWscProfile()\n");
				getWscProfile(WIF, &wsc_value, sizeof(WSC_CONFIGURED_VALUE));
*/
				if (!g_wsc_configured)
					g_wsc_configured = 1;

				int_stop_wps_led = 1;
				g_isEnrollee = 0;
			}
		}
		else					// PBC
		{
			if (WscStatus == 34 /* Configured*/ || WscStatus_2g == 34)
			{
				if (!g_wsc_configured)
					g_wsc_configured = 1;

				int_stop_wps_led = 1;
				g_isEnrollee = 0;
			}
		}

		if (int_stop_wps_led || --wsc_timeout == 0)
		{
			if(!nvram_match("sw_mode_ex", "3"))	// not AP mode
			{
#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
				nvram_set("wps_triggered", "1");// psp fix
#endif
				wsc_timeout = 0;

				btn_pressed_setup = BTNSETUP_NONE;
				btn_count_setup = 0;
				LED_CONTROL(LED_POWER, LED_ON);
				alarmtimer(NORMAL_PERIOD, 0);
#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
//				if (nvram_match("wps_band", "0"))
					stop_wsc();		// psp fix
//				else
					stop_wsc_2g();		// psp fix
				nvram_set("wps_enable", "0");	// psp fix
#endif
			}
			return;
		}

		++btn_count_setup;
		btn_count_setup = (btn_count_setup % 20);

		/* 0123456789 */
		/* 1010101010 */
		if ((btn_count_setup % 2) == 0 && (btn_count_setup > 10))
			LED_CONTROL(LED_POWER, LED_ON);
		else
			LED_CONTROL(LED_POWER, LED_OFF);
	}
#endif
}
コード例 #11
0
static void catch_sig(int sig)
{
	if (sig == SIGUSR1)
	{
		dbg("[watchdog] Catch SIGUSR1 for rc_service\n");
		if (nvram_get("rc_service"))
			service_handle();
	}
	else if (sig == SIGUSR2)
	{
//		dbg("[watchdog] Catch Reset to Default Signal 2\n");
	}
	else if (sig == SIGTSTP && !nvram_match("sw_mode_ex", "3"))
	{
		if (nvram_match("wps_oob_flag", "1"))
		{
#if defined (W7_LOGO) || defined (WIFI_LOGO)
			if (nvram_match("wps_band", "0"))
				if (nvram_match("wl_radio_x", "0"))
					return;
			else
				if (nvram_match("rt_radio_x", "0"))
					return;
#else
#if 0
			if (nvram_match("wl_radio_x", "0") || nvram_match("rt_radio_x", "0"))
#else
			if (nvram_match("wl_radio_x", "0") && nvram_match("rt_radio_x", "0"))
#endif
				return;
#endif
#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
			nvram_set("wps_triggered", "1");	// psp fix
			count_to_stop_wps = 0;
#endif
			nvram_set("wps_oob_flag", "0");
			wsc_timeout = 0;
			btn_pressed_setup = BTNSETUP_NONE;
			btn_count_setup = 0;
			LED_CONTROL(LED_POWER, LED_ON);
			alarmtimer(NORMAL_PERIOD, 0);

#if defined (W7_LOGO) || defined (WIFI_LOGO)
			if (nvram_match("wps_band", "0"))
				wps_oob();
			else
				wps_oob_2g();
#else
			wps_oob_both();
#endif
			WscStatus_old = -1;
			WscStatus_old_2g = -1;
		}
		else if (nvram_match("wps_start_flag", "3") || nvram_match("wps_start_flag", "4"))	// let the SW push button be the same as the HW push button
		{
#if defined (W7_LOGO) || defined (WIFI_LOGO)
			if (nvram_match("wps_band", "0"))
				if (nvram_match("wl_radio_x", "0"))
					return;
			else
				if (nvram_match("rt_radio_x", "0"))
					return;
#else
#if 0
			if (nvram_match("wl_radio_x", "0") || nvram_match("rt_radio_x", "0"))
#else
			if (nvram_match("wl_radio_x", "0") && nvram_match("rt_radio_x", "0"))
#endif
				return;
#endif
//			if (nvram_match("wl_radio_x", "1"))
			stop_wsc();
//			if (nvram_match("rt_radio_x", "1"))
			stop_wsc_2g();
			nvram_set("wps_enable", "0");
#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
			nvram_set("wps_triggered", "1");	// psp fix
			count_to_stop_wps = 0;
			if (nvram_match("wps_start_flag", "3"))
                                nvram_set("wps_band", "1");
                        else
				nvram_set("wps_band", "0");
#endif
			nvram_set("wps_start_flag", "0");
			alarmtimer(NORMAL_PERIOD, 0);
			btn_pressed_setup = BTNSETUP_START;
			btn_count_setup = 0;
			btn_count_setup_second = 0;
#if defined (W7_LOGO) || defined (WIFI_LOGO)
			if (nvram_match("wps_band", "0"))
				start_wsc_pbc();
			else
				start_wsc_pbc_2g();
#else
#if 0
			start_wsc_pbc_both();
#else
			if (nvram_match("wps_band", "1"))
				start_wsc_pbc_2g();
			else
				start_wsc_pbc();
#endif
#endif
			WscStatus_old = -1;
			WscStatus_old_2g = -1;
			wsc_timeout = 120*20;
			alarmtimer(0, RUSHURGENT_PERIOD);
		}
		else if (nvram_match("wps_enable", "0"))
		{
#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
			nvram_set("wps_triggered", "1");	// psp fix
			count_to_stop_wps = 0;
#endif
			wsc_timeout = 1;
			btn_pressed_setup = BTNSETUP_NONE;
			btn_count_setup = 0;
			LED_CONTROL(LED_POWER, LED_ON);
			alarmtimer(NORMAL_PERIOD, 0);
//			if (nvram_match("wps_band", "0"))
//				if (nvram_match("wl_radio_x", "1"))
					stop_wsc();
//			else
//				if (nvram_match("rt_radio_x", "1"))
					stop_wsc_2g();
		}
		else if (nvram_match("wps_start_flag", "1"))
		{
			if (nvram_match("wps_band", "0"))
				if (nvram_match("wl_radio_x", "0"))
					return;
			else
				if (nvram_match("rt_radio_x", "0"))
					return;

#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
			nvram_set("wps_triggered", "1");	// psp fix
			count_to_stop_wps = 15;
#endif
			nvram_set("wps_start_flag", "0");

			wsc_timeout = 1;
			btn_pressed_setup = BTNSETUP_NONE;
			btn_count_setup = 0;
			LED_CONTROL(LED_POWER, LED_ON);
			alarmtimer(NORMAL_PERIOD, 0);

			WscStatus_old = -1;
			WscStatus_old_2g = -1;
			if (nvram_match("wps_band", "0"))
				start_wsc();
			else
				start_wsc_2g();
		}
		else if (nvram_match("wps_start_flag", "2"))
		{
			if (nvram_match("wps_mode", "1"))
			{
				if (nvram_match("wps_band", "0"))
					if (nvram_match("wl_radio_x", "0"))
						return;
				else
					if (nvram_match("rt_radio_x", "0"))
						return;
			}
			else
			{
#if defined (W7_LOGO) || defined (WIFI_LOGO)
				if (nvram_match("wps_band", "0"))
					if (nvram_match("wl_radio_x", "0"))
						return;
				else
					if (nvram_match("rt_radio_x", "0"))
						return;
#else
#if 0
				if (nvram_match("wl_radio_x", "0") || nvram_match("rt_radio_x", "0"))
#else
				if (nvram_match("wl_radio_x", "0") && nvram_match("rt_radio_x", "0"))
#endif
					return;
#endif
			}

#if (!defined(W7_LOGO) && !defined(WIFI_LOGO))
			nvram_set("wps_triggered", "1");	// psp fix
			count_to_stop_wps = 0;
#endif
			nvram_set("wps_start_flag", "0");
			alarmtimer(NORMAL_PERIOD, 0);
			btn_pressed_setup = BTNSETUP_START;
			btn_count_setup = 0;

			if (nvram_match("wps_mode", "1"))
			{
				if (nvram_match("wps_pin_web", ""))
				{
					if (nvram_match("wps_band", "0"))
						wps_pin("0");
					else
						wps_pin_2g("0");
				}
				else
				{
					if (nvram_match("wps_band", "0"))
						wps_pin(nvram_safe_get("wps_pin_web"));
					else
						wps_pin_2g(nvram_safe_get("wps_pin_web"));
				}
			}
			else
			{
#if defined (W7_LOGO) || defined (WIFI_LOGO)
				if (nvram_match("wps_band", "0"))
					wps_pbc();
				else
					wps_pbc_2g();
#else
#if 0
				wps_pbc_both();
#else
				nvram_set("wps_band", "1");
				wps_pbc_2g();
#endif
#endif
			}

			WscStatus_old = -1;
			WscStatus_old_2g = -1;
			wsc_timeout = 120*20;
			alarmtimer(0, RUSHURGENT_PERIOD);
		}
	}
	else if (sig == SIGTTIN)
	{
		wsc_user_commit();
	}
}
コード例 #12
0
ファイル: watchdog.c プロジェクト: eckyecky/rt-n56u
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();
		}
	}
}