Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
static void
notify_shutdown(void)
{
#if defined (BOARD_GPIO_BTN_PWR_CUT) && defined (BOARD_GPIO_BTN_PWR_INT)
	unsigned int i_button_value = BTN_PRESSED;

	if (cpu_gpio_get_pin(BOARD_GPIO_BTN_PWR_INT, &i_button_value) < 0)
		return;

	if (i_button_value == BTN_PRESSED)
		return;

	/* POWER button is released, shutdown now */
	cpu_gpio_irq_set(BOARD_GPIO_BTN_PWR_INT, 0, 0, 0);

	reset_signals();

	printf("Button POWER is released, shutdown system...\n");

	shutdown_router(2);

	printf("\nShutdown!\n\n");

	usleep(10000);

	sync();

	/* Power OFF */
	cpu_gpio_set_pin(BOARD_GPIO_BTN_PWR_CUT, 0);
#endif
}
Exemplo n.º 3
0
static int
btn_check_wlt(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_WPS)
    /* check WPS pressed */
    if (btn_count_wps > 0)
        return 0;
#endif
    if (cpu_gpio_get_pin(BOARD_GPIO_BTN_WLTOG, &i_button_value) < 0)
        return 0;

    if (i_button_value == BTN_PRESSED) {
        /* WLTOG pressed */
        btn_count_wlt++;

#if defined (BOARD_GPIO_LED_POWER)
        /* flash power LED */
        if (btn_count_wlt > BTN_EZ_WAIT_COUNT) {
            int i_led = get_state_led_pwr();
            cpu_gpio_set_pin(BOARD_GPIO_LED_POWER, (btn_count_wlt % 2) ? i_led : !i_led);
        }
#endif
    } else {
        /* WLTOG released */
        int press_count = btn_count_wlt;
        btn_count_wlt = 0;

        if (press_count > BTN_EZ_WAIT_COUNT) {
            /* pressed >= 3sec */
            wd_alarmtimer(0, 0);
            ez_event_long(1);
        } else if (press_count > 0 && press_count < BTN_EZ_CANCEL_COUNT) {
            /* pressed < 500ms */
            wd_alarmtimer(0, 0);
            ez_event_short(1);
        }
    }

    return (i_button_value != BTN_PRESSED) ? 0 : 1;
}
Exemplo n.º 4
0
void 
LED_CONTROL(int gpio_led, int flag)
{
	int front_led_x = 1;

	switch (gpio_led)
	{
#if defined (BOARD_GPIO_LED_WAN)
	case BOARD_GPIO_LED_WAN:
		front_led_x = nvram_get_int("front_led_wan");
		break;
#endif
#if defined (BOARD_GPIO_LED_LAN)
	case BOARD_GPIO_LED_LAN:
		front_led_x = nvram_get_int("front_led_lan");
		break;
#endif
#if defined (BOARD_GPIO_LED_WIFI)
	case BOARD_GPIO_LED_WIFI:
		front_led_x = nvram_get_int("front_led_wif");
		break;
#endif
#if defined (BOARD_GPIO_LED_USB)
	case BOARD_GPIO_LED_USB:
#if (BOARD_NUM_USB_PORTS > 0)
		front_led_x = nvram_get_int("front_led_usb");
#else
		front_led_x = 0;
#endif
		break;
#endif
#if defined (BOARD_GPIO_LED_POWER)
	case BOARD_GPIO_LED_POWER:
		front_led_x = nvram_get_int("front_led_pwr");
		break;
#endif
#if defined (BOARD_GPIO_LED_ALL)
	case BOARD_GPIO_LED_ALL:
		front_led_x = nvram_get_int("front_led_all");
		break;
#endif
	default:
		return;
	}

	if (front_led_x == 0)
		flag = LED_OFF;

#if !defined (BOARD_GPIO_LED_ALL)
	if (nvram_get_int("front_led_all") == 0
#if defined (BOARD_GPIO_LED_POWER)
	    && gpio_led != BOARD_GPIO_LED_POWER
#endif
	)
		flag = LED_OFF;
#endif

#if defined (BOARD_GPIO_LED_WIFI) && defined (CONFIG_RALINK_MT7620) && (BOARD_GPIO_LED_WIFI == 72)
	if (gpio_led == BOARD_GPIO_LED_WIFI) {
		cpu_gpio_mode_set_bit(13, (flag == LED_OFF) ? 1 : 0); // change GPIO Mode for WLED
		cpu_gpio_set_pin(gpio_led, LED_OFF); // always set GPIO to high
	}
	else
#endif
		cpu_gpio_set_pin(gpio_led, flag);
}
Exemplo n.º 5
0
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;
    }
}
Exemplo n.º 6
0
Arquivo: rc.c Projeto: ff94315/rt-n56u
void 
LED_CONTROL(int gpio_led, int flag)
{
	int front_led_x = 1;
	int is_soft_blink = 0;

	switch (gpio_led)
	{
#if defined (BOARD_GPIO_LED_ROUTER)
	case BOARD_GPIO_LED_ROUTER:
		break;
#endif
#if defined (BOARD_GPIO_LED_WAN)
	case BOARD_GPIO_LED_WAN:
		front_led_x = nvram_get_int("front_led_wan");
		break;
#endif
#if defined (BOARD_GPIO_LED_LAN)
	case BOARD_GPIO_LED_LAN:
		front_led_x = nvram_get_int("front_led_lan");
		break;
#endif
#if defined (BOARD_GPIO_LED_WIFI)
	case BOARD_GPIO_LED_WIFI:
		front_led_x = nvram_get_int("front_led_wif");
		break;
#endif
#if defined (BOARD_GPIO_LED_SW2G)
	case BOARD_GPIO_LED_SW2G:
		is_soft_blink = 1;
		front_led_x = nvram_get_int("front_led_wif");
		if (front_led_x) {
#if defined (BOARD_GPIO_LED_SW5G) && (BOARD_GPIO_LED_SW5G == BOARD_GPIO_LED_SW2G)
			flag = (is_radio_on_rt() || is_radio_on_wl()) ? LED_ON : LED_OFF;
#else
			flag = (is_radio_on_rt()) ? LED_ON : LED_OFF;
#endif
		}
		break;
#endif
#if defined (BOARD_GPIO_LED_SW5G) && (!defined (BOARD_GPIO_LED_SW2G) || (BOARD_GPIO_LED_SW5G != BOARD_GPIO_LED_SW2G))
	case BOARD_GPIO_LED_SW5G:
		is_soft_blink = 1;
		front_led_x = nvram_get_int("front_led_wif");
		if (front_led_x) {
			flag = (is_radio_on_wl()) ? LED_ON : LED_OFF;
		}
		break;
#endif
#if defined (BOARD_GPIO_LED_USB)
	case BOARD_GPIO_LED_USB:
#if (BOARD_NUM_USB_PORTS > 0)
		front_led_x = nvram_get_int("front_led_usb");
#else
		front_led_x = 0;
#endif
		break;
#endif
#if defined (BOARD_GPIO_LED_POWER)
	case BOARD_GPIO_LED_POWER:
		front_led_x = nvram_get_int("front_led_pwr");
		break;
#endif
#if defined (BOARD_GPIO_LED_ALL)
	case BOARD_GPIO_LED_ALL:
		front_led_x = nvram_get_int("front_led_all");
		break;
#endif
	default:
		return;
	}

	if (front_led_x == 0)
		flag = LED_OFF;

#if !defined (BOARD_GPIO_LED_ALL)
	if (nvram_get_int("front_led_all") == 0
#if defined (BOARD_GPIO_LED_POWER)
	    && gpio_led != BOARD_GPIO_LED_POWER
#endif
	)
		flag = LED_OFF;
#endif

#if defined (BOARD_GPIO_LED_WIFI) && defined (CONFIG_RALINK_MT7620) && (BOARD_GPIO_LED_WIFI == 72)
	if (gpio_led == BOARD_GPIO_LED_WIFI) {
		cpu_gpio_mode_set_bit(13, (flag == LED_OFF) ? 1 : 0); // change GPIO Mode for WLED
		cpu_gpio_set_pin(gpio_led, LED_OFF); // always set GPIO to high
	} else
#endif
	{
		if (is_soft_blink)
			cpu_gpio_led_enabled(gpio_led, (flag == LED_OFF) ? 0 : 1);
		
		cpu_gpio_set_pin(gpio_led, flag);
	}
}
Exemplo n.º 7
0
Arquivo: rc.c Projeto: 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
}
Exemplo n.º 8
0
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
}
Exemplo n.º 9
0
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();
		}
	}
}