Beispiel #1
0
int nvram_del_env(partition_t part, char *envvar, int evlen)
{
	int last, current, pos, i;
	char *buffer;

	if(!part.addr)
		return -1;

	last=find_last_envvar(part);
	current = pos = get_past_env_pos(part, envvar, evlen);
	
	// TODO is this really required?
	/* go back to non-0 value */
	current--;

	while (nvram_read_byte(current))
		current--;

	// TODO is this required?
	current++;

	buffer=get_nvram_buffer(last-pos);

	for (i=0; i<last-pos; i++)
		buffer[i]=nvram_read_byte(i+pos);

	for (i=0; i<last-pos; i++)
		nvram_write_byte(i+current, buffer[i]);

	free_nvram_buffer(buffer);

	erase_nvram(last, current+last-pos);

	return 0;
}
Beispiel #2
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;
}
Beispiel #3
0
int main(int argc, char **argv)
{
	char *base;
	int f;

	/*
		Make sure std* are valid since several functions attempt to close these
		handles. If nvram_*() runs first, nvram=0, nvram gets closed. - zzz
	*/

	if ((f = open("/dev/null", O_RDWR)) < 0) {
	}
	else if(f < 3) {
		dup(f);
		dup(f);
	}
	else {
		close(f);
	}

	base = strrchr(argv[0], '/');
	base = base ? base + 1 : argv[0];

#if 0
	if (strcmp(base, "rc") == 0) {
		if (argc < 2) return 1;
		if (strcmp(argv[1], "start") == 0) return kill(1, SIGUSR2);
		if (strcmp(argv[1], "stop") == 0) return kill(1, SIGINT);
		if (strcmp(argv[1], "restart") == 0) return kill(1, SIGHUP);
		++argv;
		--argc;
		base = argv[0];
	}
#endif

#ifdef RTCONFIG_RALINK
    if(getpid() != 1)
    {
#endif

#if defined(DEBUG_NOISY)
	if (nvram_match("debug_logrc", "1")) {
		int i;

		cprintf("[rc %d] ", getpid());
		for (i = 0; i < argc; ++i) {
			cprintf("%s ", argv[i]);
		}
		cprintf("\n");

	}
#endif

#if defined(DEBUG_NOISY)
	if (nvram_match("debug_ovrc", "1")) {
		char tmp[256];
		char *a[32];

		realpath(argv[0], tmp);
		if ((strncmp(tmp, "/tmp/", 5) != 0) && (argc < 32)) {
			sprintf(tmp, "%s%s", "/tmp/", base);
			if (f_exists(tmp)) {
				cprintf("[rc] override: %s\n", tmp);
				memcpy(a, argv, argc * sizeof(a[0]));
				a[argc] = 0;
				a[0] = tmp;
				execvp(tmp, a);
				exit(0);
			}
		}
	}
#endif
#ifdef RTCONFIG_RALINK
    }
#endif
	const applets_t *a;
	for (a = applets; a->name; ++a) {
		if (strcmp(base, a->name) == 0) {
			openlog(base, LOG_PID, LOG_USER);
			return a->main(argc, argv);
		}
	}


	if(!strcmp(base, "restart_wireless")){
		printf("restart wireless...\n");
		restart_wireless();
		return 0;
	}
        else if(!strcmp(base, "nvram_erase")){
                erase_nvram();
                return 0;
        }
#ifdef RTCONFIG_USB
	else if(!strcmp(base, "get_apps_name")){
		if(argc != 2){
			printf("Usage: get_apps_name [File name]\n");
			return 0;
		}

		return get_apps_name(argv[1]);
	}
	else if(!strcmp(base, "asus_sd")){
		if(argc != 3){
			printf("Usage: asus_sd [device_name] [action]\n");
			return 0;
		}

		return asus_sd(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_lp")){
		if(argc != 3){
			printf("Usage: asus_lp [device_name] [action]\n");
			return 0;
		}

		return asus_lp(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_sg")){
		if(argc != 3){
			printf("Usage: asus_sg [device_name] [action]\n");
			return 0;
		}

		return asus_sg(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_sr")){
		if(argc != 3){
			printf("Usage: asus_sr [device_name] [action]\n");
			return 0;
		}

		return asus_sr(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_tty")){
		if(argc != 3){
			printf("Usage: asus_tty [device_name] [action]\n");
			return 0;
		}

		return asus_tty(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_usbbcm")){
		if(argc != 3){
			printf("Usage: asus_usbbcm [device_name] [action]\n");
			return 0;
		}

		return asus_usbbcm(argv[1], argv[2]);
	}
	else if(!strcmp(base, "asus_usb_interface")){
		if(argc != 3){
			printf("Usage: asus_usb_interface [device_name] [action]\n");
			return 0;
		}

		return asus_usb_interface(argv[1], argv[2]);
	}
	else if (!strcmp(base, "usb_notify")) {
#if defined(RTCONFIG_APP_PREINSTALLED) || defined(RTCONFIG_APP_NETINSTALLED)
		usb_notify();
#endif

		return 0;
	}
#if defined(RTCONFIG_APP_PREINSTALLED) || defined(RTCONFIG_APP_NETINSTALLED)
	else if(!strcmp(base, "run_app_script")){
		if(argc != 3){
			printf("Usage: run_app_script [Package name | allpkg] [APP action]\n");
			return 0;
		}

		if(!strcmp(argv[1], "allpkg"))
			return run_app_script(NULL, argv[2]);
		else
			return run_app_script(argv[1], argv[2]);
	}
	else if (!strcmp(base, "chk_app_state")) {
#define PID_FILE "/var/run/chk_app_state.pid"
		FILE *fp;
		char chk_value[4];

		if(f_read_string(PID_FILE, chk_value, 4) > 0
				&& atoi(chk_value) != getpid()){
			_dprintf("Already running!\n");
			return 0;
		}

		if((fp = fopen(PID_FILE, "w")) == NULL){
			_dprintf("Can't open the pid file!\n");
			return 0;
		}

		fprintf(fp, "%d", getpid());
		fclose(fp);

		memset(chk_value, 0, 4);
		strncpy(chk_value, nvram_safe_get("apps_state_switch"), 4);
		if(strcmp(chk_value, "")){
			if(atoi(chk_value) != APPS_SWITCH_FINISHED && !pids("app_switch.sh")){
				_dprintf("Don't have the switch script.\n");
				nvram_set("apps_state_switch", "");
			}

			unlink(PID_FILE);
			return 0;
		}

		memset(chk_value, 0, 4);
		strncpy(chk_value, nvram_safe_get("apps_state_install"), 4);
		if(strcmp(chk_value, "")){
			if(atoi(chk_value) != APPS_INSTALL_FINISHED && !pids("app_install.sh")){
				_dprintf("Don't have the install script.\n");
				nvram_set("apps_state_install", "");
			}

			unlink(PID_FILE);
			return 0;
		}

		memset(chk_value, 0, 4);
		strncpy(chk_value, nvram_safe_get("apps_state_upgrade"), 4);
		if(strcmp(chk_value, "")){
			if(atoi(chk_value) != APPS_UPGRADE_FINISHED && !pids("app_upgrade.sh")){
				_dprintf("Don't have the upgrade script.\n");
				nvram_set("apps_state_upgrade", "");
			}

			unlink(PID_FILE);
			return 0;
		}

		memset(chk_value, 0, 4);
		strncpy(chk_value, nvram_safe_get("apps_state_enable"), 4);
		if(strcmp(chk_value, "")){
			if(atoi(chk_value) != APPS_ENABLE_FINISHED && !pids("app_set_enabled.sh")){
				_dprintf("Don't have the enable script.\n");
				nvram_set("apps_state_enable", "");
			}

			unlink(PID_FILE);
			return 0;
		}

		unlink(PID_FILE);
		return 0;
	}
#endif
#endif
	else if(!strcmp(base, "ATE")) {
		if( argc == 2 || argc == 3 || argc == 4) {
			asus_ate_command(argv[1], argv[2], argv[3]);
		}
		else
			printf("ATE_ERROR\n");
                return 0;
	}
#if defined(RTCONFIG_RALINK)
	else if (!strcmp(base, "FWRITE")) {
		if (argc == 3)
			return FWRITE(argv[1], argv[2]);
		else
		return 0;
	}
	else if (!strcmp(base, "FREAD")) {
		if (argc == 3)
		{
			unsigned int addr;
			int len;
			addr = strtoul(argv[1], NULL, 16);
			if(argv[2][0] == '0' && argv[2][1] == 'x')
				len  = (int) strtoul(argv[2], NULL, 16);
			else
				len  = (int) strtoul(argv[2], NULL, 10);

			if(len > 0)
				return FREAD(addr, len);
		}
		printf("ATE_ERROR\n");
		return 0;
	}
	else if (!strcmp(base, "asuscfe_5g")) {
		if (argc == 2)
			return asuscfe(argv[1], WIF_5G);
		else
			return EINVAL;
	}
	else if (!strcmp(base, "asuscfe_2g")) {
		if (argc == 2)
			return asuscfe(argv[1], WIF_2G);
		else
			return EINVAL;
	}
	else if (!strcmp(base, "stainfo_2g")) {
		return stainfo(0);
	}
	else if (!strcmp(base, "stainfo_5g")) {
		return stainfo(1);
	}
#ifdef RTCONFIG_DSL
	else if(!strcmp(base, "gen_ralink_config")){
		if(argc != 3){
			printf("Usage: gen_ralink_config [band] [is_iNIC]\n");
			return 0;
		}
		return gen_ralink_config(atoi(argv[1]), atoi(argv[2]));
	}
#endif
#endif
	else if(!strcmp(base, "run_telnetd")) {
		run_telnetd();
		return 0;
	}
#if defined(RTCONFIG_PPTPD) || defined(RTCONFIG_ACCEL_PPTPD)
	else if(!strcmp(base, "run_pptpd")) {
		start_pptpd();
		return 0;
	}
#endif
#ifdef RTCONFIG_PARENTALCTRL
	else if(!strcmp(base, "pc")) {
		pc_main(argc, argv);
		return 0;
	}
#endif
#ifdef CONFIG_BCMWL5
	else if (!strcmp(base, "wlcscan")) {
		return wlcscan_main();
	}
#endif
#ifdef RTCONFIG_WIRELESSREPEATER
	else if (!strcmp(base, "wlcconnect")) {
		return wlcconnect_main();
	}
	else if (!strcmp(base, "setup_dnsmq")) {
		if(argc != 2)
			return 0;

		return setup_dnsmq(atoi(argv[1]));
	}
#endif
	else if (!strcmp(base, "add_multi_routes")) {
		return add_multi_routes();
	}
	else if (!strcmp(base, "led_ctrl")) {
		if (argc != 3)
			return 0;

		return(led_control(atoi(argv[1]), atoi(argv[2])));
	}
#ifdef RTCONFIG_BCMARM
        /* mtd-erase2 [device] */
        else if (!strcmp(base, "mtd-erase2")) {
                if (argv[1] && ((!strcmp(argv[1], "boot")) ||
                        (!strcmp(argv[1], "linux")) ||
                        (!strcmp(argv[1], "linux2")) ||
                        (!strcmp(argv[1], "rootfs")) ||
                        (!strcmp(argv[1], "rootfs2")) ||
                        (!strcmp(argv[1], "nvram")))) {

                        return mtd_erase(argv[1]);
                } else {
                        fprintf(stderr, "usage: mtd-erase2 [device]\n");
                        return EINVAL;
                }
        }
        /* mtd-write2 [path] [device] */
        else if (!strcmp(base, "mtd-write2")) {
                if (argc >= 3)
                        return mtd_write(argv[1], argv[2]);
                else {
                        fprintf(stderr, "usage: mtd-write2 [path] [device]\n");
                        return EINVAL;
                }
        }
#endif
	else if (!strcmp(base, "free_caches")) {
		int c;
		unsigned int test_num;
		char *set_value = NULL;
		int clean_time = 1;
		int threshold = 0;

		if(argc){
			while((c = getopt(argc, argv, "c:w:t:")) != -1){
				switch(c){
					case 'c': // set the clean-cache mode: 0~3.
						test_num = strtol(optarg, NULL, 10);
        		if(test_num == LONG_MIN || test_num == LONG_MAX){
        			_dprintf("ERROR: unknown value %s...\n", optarg);
							return 0;
						}

						if(test_num < 0 || test_num > 3){
							_dprintf("ERROR: the value %s was over the range...\n", optarg);
							return 0;
						}

						set_value = optarg;

						break;
					case 'w': // set the waited time for cleaning.
						test_num = strtol(optarg, NULL, 10);
        		if(test_num < 0 || test_num == LONG_MIN || test_num == LONG_MAX){
        			_dprintf("ERROR: unknown value %s...\n", optarg);
							return 0;
						}

						clean_time = test_num;

						break;
					case 't': // set the waited time for cleaning.
						test_num = strtol(optarg, NULL, 10);
        		if(test_num < 0 || test_num == LONG_MIN || test_num == LONG_MAX){
        			_dprintf("ERROR: unknown value %s...\n", optarg);
							return 0;
						}

						threshold = test_num;

						break;
					default:
						fprintf(stderr, "Usage: free_caches [ -c clean_mode ] [ -w clean_time ] [ -t threshold ]\n");
						break;
				}
			}
		}

		if(!set_value)
			set_value = FREE_MEM_PAGE;

		free_caches(set_value, clean_time, threshold);

		return 0;
	}
	printf("Unknown applet: %s\n", base);
	return 0;
}
Beispiel #4
0
int
main(int argc, char **argv)
{
	int ret;
	char *base = strrchr(argv[0], '/');
	const applet_rc_t *app;
	base = base ? base + 1 : argv[0];

	/* init */
	if (!strcmp(base, "init")) {
		if (getpid() != 1 ) {
			dbg("error: %s must be run as PID 1!\n", base);
			return -1;
		}
		init_main_loop();
		return 0;
	}

	/* stub for early kernel hotplug */
	if (!strcmp(base, "hotplug")) {
		return 0;
	}

	if (!strcmp(base, "reboot")) {
		return sys_exit();
	}

	if (!strcmp(base, "shutdown") || !strcmp(base, "halt")) {
		return sys_stop();
	}

	if (!strcmp(base, "rc")) {
		dbg("error: cannot run rc directly!\n");
		return EINVAL;
	}

	/* Set TZ for all rc programs */
	setenv_tz();

	/* Start applets */
	for (app = applets_rc; app->name; app++) {
		if (strcmp(base, app->name) == 0)
			return app->main(argc, argv);
	}

	ret = 0;
	if (!strcmp(base, "reset_to_defaults")) {
		erase_nvram();
		sys_exit();
	}
	else if (!strcmp(base, "run_ftpsamba")) {
#if defined(APP_SMBD)
		restart_smbd();
#else
		;
#endif
#if defined(APP_FTPD)
		restart_ftpd();
#endif
	}
#if defined(APP_SMBD)
	else if (!strcmp(base, "run_samba")) {
		restart_smbd();
	}
#endif
#if defined(APP_FTPD)
	else if (!strcmp(base, "run_ftp")) {
		restart_ftpd();
	}
#endif
#if defined(APP_NFSD)
	else if (!strcmp(base, "run_nfsd")) {
		run_nfsd();
	}
#endif
#if defined(APP_MINIDLNA)
	else if (!strcmp(base, "run_minidlna")) {
		restart_dms(0);
	}
#endif
#if defined(APP_FIREFLY)
	else if (!strcmp(base, "run_firefly")) {
		restart_itunes();
	}
#endif
#if defined(APP_TRMD)
	else if (!strcmp(base, "run_transmission")) {
		restart_torrent();
	}
#endif
#if defined(APP_ARIA)
	else if (!strcmp(base, "run_aria")) {
		restart_aria();
	}
#endif
#if defined(APP_FTPD)
	else if (!strcmp(base, "stop_ftp")) {
		stop_ftp();
	}
#endif
#if defined(APP_SMBD)
	else if (!strcmp(base, "stop_samba")) {
		stop_samba(0);
	}
#endif
	else if (!strcmp(base, "stop_ftpsamba")) {
#if defined(APP_FTPD)
		stop_ftp();
#endif
#if defined(APP_SMBD)
		stop_samba(0);
#else
		;
#endif
	}
#if defined(APP_NFSD)
	else if (!strcmp(base, "stop_nfsd")) {
		stop_nfsd();
	}
#endif
#if defined(APP_MINIDLNA)
	else if (!strcmp(base, "stop_minidlna")) {
		stop_dms();
	}
#endif
#if defined(APP_FIREFLY)
	else if (!strcmp(base, "stop_firefly")) {
		stop_itunes();
	}
#endif
#if defined(APP_TRMD)
	else if (!strcmp(base, "stop_transmission")) {
		stop_torrent();
	}
#endif
#if defined(APP_ARIA)
	else if (!strcmp(base, "stop_aria")) {
		stop_aria();
	}
#endif
	else if (!strcmp(base, "start_ddns")) {
		start_ddns(1);
	}
	else if (!strcmp(base, "stop_wan")) {
		notify_rc("manual_wan_disconnect");
	}
	else if (!strcmp(base, "restart_wan")) {
		notify_rc("manual_wan_reconnect");
	}
	else if (!strcmp(base, "restart_dns")) {
		restart_dns();
	}
	else if (!strcmp(base, "restart_dhcpd")) {
		restart_dhcpd();
	}
	else if (!strcmp(base, "restart_networkmap")) {
		restart_networkmap();
	}
	else if (!strcmp(base, "run_telnetd")) {
		run_telnetd();
	}
	else if (!strcmp(base, "restart_firewall")) {
		restart_firewall();
	}
	else if (!strcmp(base, "radio2_toggle")) {
		manual_toggle_radio_rt(-1);
	}
	else if (!strcmp(base, "radio2_toggle_on")) {
		manual_toggle_radio_rt(1);
	}
	else if (!strcmp(base, "radio2_toggle_off")) {
		manual_toggle_radio_rt(0);
	}
	else if (!strcmp(base, "radio2_enable")) {
		manual_change_radio_rt(1);
	}
	else if (!strcmp(base, "radio2_disable")) {
		manual_change_radio_rt(0);
	}
	else if (!strcmp(base, "radio2_guest_enable")) {
		manual_change_guest_rt(1);
	}
	else if (!strcmp(base, "radio2_guest_disable")) {
		manual_change_guest_rt(0);
	}
	else if (!strcmp(base, "radio2_eeprom_mac")) {
		if (argc > 1 && strlen(argv[1]) == 17)
			ret = set_wireless_mac(0, argv[1]);
		else {
			printf("Usage: %s XX:XX:XX:XX:XX:XX\n\n", base);
			ret = get_wireless_mac(0);
		}
	}
	else if (!strcmp(base, "radio2_restart")) {
		int radio_on = get_enabled_radio_rt();
		if (radio_on)
			radio_on = is_radio_allowed_rt();
		restart_wifi_rt(radio_on, 1);
	}
#if BOARD_HAS_5G_RADIO
	else if (!strcmp(base, "radio5_toggle")) {
		manual_toggle_radio_wl(-1);
	}
	else if (!strcmp(base, "radio5_toggle_on")) {
		manual_toggle_radio_wl(1);
	}
	else if (!strcmp(base, "radio5_toggle_off")) {
		manual_toggle_radio_wl(0);
	}
	else if (!strcmp(base, "radio5_enable")) {
		manual_change_radio_wl(1);
	}
	else if (!strcmp(base, "radio5_disable")) {
		manual_change_radio_wl(0);
	}
	else if (!strcmp(base, "radio5_guest_enable")) {
		manual_change_guest_wl(1);
	}
	else if (!strcmp(base, "radio5_guest_disable")) {
		manual_change_guest_wl(0);
	}
	else if (!strcmp(base, "radio5_eeprom_mac")) {
		if (argc > 1 && strlen(argv[1]) == 17)
			ret = set_wireless_mac(1, argv[1]);
		else {
			printf("Usage: %s XX:XX:XX:XX:XX:XX\n\n", base);
			ret = get_wireless_mac(1);
		}
	}
	else if (!strcmp(base, "radio5_restart")) {
		int radio_on = get_enabled_radio_wl();
		if (radio_on)
			radio_on = is_radio_allowed_wl();
		restart_wifi_wl(radio_on, 1);
	}
#endif
#if (BOARD_NUM_USB_PORTS > 0)
	else if (!strcmp(base, "ejusb")) {
		int port = 0;
		char *devn = NULL;
		if (argc > 1) {
			if (strncmp(argv[1], "sd", 2) == 0)
				devn = argv[1];
			else {
				port = atoi(argv[1]);
				if (argc > 2)
					devn = argv[2];
			}
		}
		ret = safe_remove_usb_device(port, devn, 1);
	}
	else if (!strcmp(base, "ejusb1")) {
		char *devn = (argc > 1) ? argv[1] : NULL;
		ret = safe_remove_usb_device(1, devn, 1);
	}
#if (BOARD_NUM_USB_PORTS > 1)
	else if (!strcmp(base, "ejusb2")) {
		char *devn = (argc > 1) ? argv[1] : NULL;
		ret = safe_remove_usb_device(2, devn, 1);
	}
#endif
#endif
	else if (!strcmp(base, "pids")) {
		if (argc > 1)
			ret = pids_main(argv[1]);
		else
			ret = EINVAL;
	}
	else {
		printf("Unknown applet: %s\n", base);
		ret = EINVAL;
	}

	return ret;
}
Beispiel #5
0
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;
    }
}
Beispiel #6
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();
		}
	}
}