Ejemplo n.º 1
0
// Looks for defined commands and takes appropriate action.
// read_buffer - the data to examine.
void onCommand(char *read_buffer, int chars_read, int serial_port)
{
	// Terminate the data read with a null to enable using string functions
	// on the data read.

	if (strstr(read_buffer, "led1on") != NULL)
	{
		led_control(0, 1);
		serial_port_write("led1 is on\r\n",serial_port);
		printf("led1 is on\r\n");

	}
	else if (strstr(read_buffer, "led1off") != NULL)
	{
		led_control(0, 0);
		serial_port_write("led1 is off\r\n",serial_port);
		printf("led1 is off\r\n");
	}
	else if (strstr(read_buffer, "closeapp") != NULL)
	{
		applicationStop(serial_port);
	}
	else
	{
		//print everything else.
		printf("%s\n",read_buffer);
	}
}
Ejemplo n.º 2
0
void led_onoff(int unit)
{   
#if defined(RTAC1200HP)
	if(unit==1)
#endif		
		if(get_radio(unit, 0))
			led_control(unit?LED_5G:LED_2G, LED_ON);	
		else
			led_control(unit?LED_5G:LED_2G, LED_OFF);	
}
Ejemplo n.º 3
0
int 
setAllLedOff(void)
{
	//LAN, WAN Led Off
        eval("et", "robowr", "0", "0x18", "0x01e0");
        eval("et", "robowr", "0", "0x1a", "0x01e0");

	led_control(LED_WPS, LED_ON);
	led_control(LED_POWER, LED_OFF);
	led_control(LED_WPS, LED_OFF);
	led_control(LED_USB, LED_OFF);
	eval("radio","off");
	puts("1");
	return 0;
}
// This function will transmit a single byte out of the radio.
void rfWrite(uint8_t b)
{
  uint8_t length = 3;

  // Transceiver State Control Register -- TRX_STATE
  // This regiseter controls the states of the radio.
  // Set to the PLL_ON state - this state begins the TX.
  TRX_STATE = (TRX_STATE & 0xE0) | PLL_ON;  // Set to TX start state
  while(!(TRX_STATUS & PLL_ON))
    ;  // Wait for PLL to lock

  led_control(6,ON);  // Turn on TX LED

  // Start of frame buffer - TRXFBST
  // This is the first byte of the 128 byte frame. It should contain
  // the length of the transmission.
  TRXFBST = length;
  // Now copy the byte-to-send into the address directly after TRXFBST.
  memcpy((void *)(&TRXFBST+1), &b, 1);

  // Transceiver Pin Register -- TRXPR.
  // From the PLL_ON state, setting SLPTR high will initiate the TX.
  TRXPR |= (1<<SLPTR);   // SLPTR = 1
  TRXPR &= ~(1<<SLPTR);  // SLPTR = 0  // Then bring it back low

  // After sending the byte, set the radio back into the RX waiting state.
  TRX_STATE = (TRX_STATE & 0xE0) | RX_ON;
}
Ejemplo n.º 5
0
void set_radio(int on, int unit, int subunit)
{
	int led = (!unit)? LED_2G:LED_5G, onoff = (!on)? LED_OFF:LED_ON;
	char tmp[100], prefix[] = "wlXXXXXXXXXXXXXX", athfix[]="athXXXXXX";

	if (subunit > 0)
	{   
		snprintf(prefix, sizeof(prefix), "wl%d.%d_", unit, subunit);
//		snprintf(athfix, sizeof(athfix), "ath%d0%d", unit, subunit);
	}	
	else
	{   
		snprintf(prefix, sizeof(prefix), "wl%d_", unit);
//		snprintf(athfix, sizeof(athfix), "ath%d", unit);
	}
	strcpy(athfix, nvram_safe_get(strcat_r(prefix, "ifname", tmp)));

	if (*athfix != '\0')
	{   
	   	if(!strstr(athfix,"sta")) //all lan-interfaces except sta when running repeater mode
			doSystem("ifconfig %s %s",athfix, on?"up":"down");
	}

	led_control(led, onoff);
}
Ejemplo n.º 6
0
static int led_init(void)
{

	int i;
	printk("%s\n", __FUNCTION__);

	for (i = 0; i < ARRAY_SIZE(gpio_info); i++) {
		if(gpio_request(gpio_info[i].gpio, gpio_info[i].name)) {
				printk("request gpio failed.\n");
				return -ENODEV;
			}
		if(strcmp(mpstring, "on") == 0) {
				led_control(gpio_info[i].gpio, LED_ON);
			}
	}

	printk("%s: mpshort = %d\n", __FUNCTION__, mpshort);
	printk("%s: mpint = %d\n",  __FUNCTION__, mpint);
	printk("%s: mplong = %d\n", __FUNCTION__, mplong);
	printk("%s: mpstring = %s\n", __FUNCTION__, mpstring);
	printk("%s: mparray[0] = %d\n", __FUNCTION__, mparray[0]);
	printk("%s: mparray[1] = %d\n", __FUNCTION__, mparray[1]);
	
	return 0;
}
Ejemplo n.º 7
0
int
setFanOff(void)
{
        led_control(FAN, FAN_OFF);
        if( !button_pressed(BTN_FAN) )
                puts("1");
        else
                puts("ATE_ERROR");
}
Ejemplo n.º 8
0
void turn_led_pwr_off(void)
{
	if (!nvram_match("asus_mfg", "0"))
		return;

	nvram_set("plc_ready", "1");

#if (defined(PLN12) || defined(PLAC56))
	led_control(LED_POWER_RED, LED_OFF);
#endif
}
Ejemplo n.º 9
0
static void usbled_exit(int sig)
{
	alarmtimer(0, 0);
	status_usb = 0;
#ifdef LED_USB3
	if(model==MODEL_RTAC56U || model==MODEL_RTAC68U)
	{
		got_usb2 = 0;
		got_usb3 = 0;
	}
#endif
	usb_busy = 0;

	led_control(LED_USB, LED_OFF);
#ifdef LED_USB3
	if(model==MODEL_RTAC56U || model==MODEL_RTAC68U)
		led_control(LED_USB3, LED_OFF);
#endif

	remove("/var/run/usbled.pid");
	exit(0);
}
Ejemplo n.º 10
0
//*****************************************************************************
// Copyright (C) 2007 DESY(Deutsches-Elektronen Synchrotron) 
//
// File Name	: led.c
// 
// Title		: LED control file
// Revision		: 1.1
// Notes		:	
// Target MCU	: Atmel AVR series
//
// Author       : Vahan Petrosyan ([email protected])
// Modified by  : Frédéric Bompard CPPM ( Centre Physique des Particules de Marseille )
// Modified by  : Markus Joos ([email protected])
//
// Description : Control LEDs on front panel
//					
//
// This code is distributed under the GNU Public License
//		which can be found at http://www.gnu.org/licenses/gpl.txt
//*****************************************************************************

// Header file
#include <avr/io.h>
#include "avrlibdefs.h"
#include "avrlibtypes.h"
#include "led.h"
#include "user_code_select.h"


//Globals
leds led[NUM_OF_LED];


//*************/
void leds_init()    //Called from mmc_main.c
//*************/
{
    led[BLUE_LED].local_cntr_fnc  = LED_ON;
    led[BLUE_LED].fnc_off         = LED_ON;
    led[BLUE_LED].on_duration     = 0;
    led[BLUE_LED].color           = BLUE;
    led[BLUE_LED].control_state   = LOCAL_CONTROL_STATE;
    local_led_control(BLUE_LED, LED_ON);

    led[RED_LED].local_cntr_fnc   = LED_OFF;
    led[RED_LED].fnc_off          = LED_OFF;
    led[RED_LED].on_duration      = 0;
    led[RED_LED].color            = RED;
    led[RED_LED].control_state    = LOCAL_CONTROL_STATE;
    local_led_control(RED_LED, LED_OFF);

    led[GREEN_LED].local_cntr_fnc = LED_OFF;
    led[GREEN_LED].fnc_off        = LED_OFF;
    led[GREEN_LED].on_duration    = 0;
    led[GREEN_LED].color          = GREEN;
    led[GREEN_LED].control_state  = LOCAL_CONTROL_STATE;
    local_led_control(GREEN_LED, LED_OFF);

    if (USER_CODE == 2)
        leds_init_user();
}


//*********************/
u08 state_led(u08 led_n)   //Called from mmc_main.c
//*********************/
{
    if (led[led_n].control_state == OVERRIDE_STATE)
        return (0); //MJ: 0 = LED_OFF. Is this what we want in mmc_main.c? What is OVERRIDE_STATE used for?

    switch (led_n)
    {
    case BLUE_LED:
        if (inb(LED_BLUE_IN) & BV(LED_BLUE_PIN))    return LED_OFF;
        else                                        return LED_ON;
        break;
    case RED_LED:
        if (inb(LED_RED_IN) & BV(LED_RED_PIN))      return LED_OFF;
        else                                        return LED_ON;
        break;
    case GREEN_LED:
        if (inb(LED_GREEN_IN) & BV(LED_GREEN_PIN))  return LED_OFF;
        else                                        return LED_ON;
        break;
    default:
        if (USER_CODE == 2)
            return(state_led_user(led_n));
        break;
    }
    return (0xff); //MJ: mmc_main.c does not process this error. How could it react?
}


//*********************************************/
void local_led_control(u08 led_n, u08 led_state)   //Called from led.c only
//*********************************************/
{
    if (led[led_n].control_state == OVERRIDE_STATE)
        return;

    switch (led_n)
    {
    case BLUE_LED:
        if (led_state == LED_ON)  cbi(LED_BLUE_PORT, LED_BLUE_PIN);
        else                      sbi(LED_BLUE_PORT, LED_BLUE_PIN);
        break;
    case RED_LED:
        if (led_state == LED_ON)  cbi(LED_RED_PORT, LED_RED_PIN);
        else                      sbi(LED_RED_PORT, LED_RED_PIN);
        break;
    case GREEN_LED:
        if (led_state == LED_ON)  cbi(LED_GREEN_PORT, LED_GREEN_PIN);
        else                      sbi(LED_GREEN_PORT, LED_GREEN_PIN);
        break;
    default:
        if (USER_CODE == 2)
            local_led_control_user(led_n, led_state);
        break;
    }

    led[led_n].local_cntr_fnc = led_state;
}


//***************************************/
void led_control(u08 led_n, u08 led_state)  //Called from various places
//***************************************/
{
    if (led[led_n].control_state == LOCAL_CONTROL_STATE)
        return;

    switch (led_n)
    {
    case BLUE_LED:
        if (led_state == LED_ON)  cbi(LED_BLUE_PORT, LED_BLUE_PIN);
        else                      sbi(LED_BLUE_PORT, LED_BLUE_PIN);
        break;
    case RED_LED:
        if (led_state == LED_ON)  cbi(LED_RED_PORT, LED_RED_PIN);
        else                      sbi(LED_RED_PORT, LED_RED_PIN);
        break;
    case GREEN_LED:
        if (led_state == LED_ON)  cbi(LED_GREEN_PORT, LED_GREEN_PIN);
        else                      sbi(LED_GREEN_PORT, LED_GREEN_PIN);
        break;
    default:
        if (USER_CODE == 2)
            led_control_user(led_n, led_state);
        break;
    }

    led[led_n].state = led_state;
}


//********************************************************/
u08 ipmi_set_fru_led_state(u08 LedId, u08 LedFn, u08 LedOn)   //Called from ipmi_if.c
//********************************************************/
{
    if (LedId >= NUM_OF_LED) // value out of range
        return (0xff);

    if (LedFn >= 1 && LedFn <= 0xfa)
    {
        led[LedId].fnc_off       = LedFn;          // ON/OFF/Off time
        led[LedId].on_duration   = LedOn;          // ON time
        led[LedId].control_state = OVERRIDE_STATE; // initial state
        if (led[LedId].state == LED_ON)
        {
            led_control(LedId, LED_OFF);
            led[LedId].cnt = LedFn;                //MJ: cnt does not seem to be used for anything
        }
        else
        {
            led_control(LedId, LED_ON);
            led[LedId].cnt = LedOn;
        }
    }
    else if (LedFn == LED_OFF || LedFn == LED_ON)
    {
        led[LedId].fnc_off       = LedFn;          // ON/OFF/Off time
        led[LedId].on_duration   = 0x00;           // ON time
        led[LedId].control_state = OVERRIDE_STATE; // initial state
        led_control(LedId, LedFn);
    }
    else if (LedFn == RESTORE_LOCAL_CONTROL)
    {
        local_led_control(LedId, led[LedId].local_cntr_fnc);
        led[LedId].control_state = LOCAL_CONTROL_STATE; // initial state
    }
    else
        return (0xff);

    return (0);
}
Ejemplo n.º 11
0
void rdstrategy(register struct buf *bp)
{
	int root = major(bp->b_dev);
    static int mutex = 0;
	if(root>MAXDEV) return;

    mutex++;
    if(mutex>1)
    {
        led_control(LED_SWAP,1);
    } else {
        led_control(LED_DISK,0);
    }

	int part = minor(bp->b_dev);
	int unit = disks[root].unit;

	int offset=0;
	int s;

	if(part>0)
		offset = dflags[root].start[part-1];

	offset += (bp->b_blkno);

    if (bp->b_dev == swapdev) {
        led_control(LED_SWAP,1);
    } else {
        led_control(LED_DISK,1);
    }

    s = splbio();

#ifdef UCB_METER
        if (rddk >= 0) {
                dk_busy |= 1 << (rddk + root);
                dk_xfer[rddk + root]++;
                dk_bytes[rddk + root] += bp->b_bcount;
        }
#endif


	if (bp->b_flags & B_READ) {
		disks[root].read(unit, offset, bp->b_addr, bp->b_bcount);
	} else {
		if(!(disks[root].settings & RD_READONLY))
			disks[root].write(unit, offset, bp->b_addr, bp->b_bcount);
	}

	biodone(bp);
    if (bp->b_dev == swapdev) {
        led_control(LED_SWAP,0);
    } else {
        led_control(LED_DISK,0);
    }
	splx(s);
    mutex--;
}
Ejemplo n.º 12
0
int main(int argc, char **argv)
{
	/* 
	 * Run it in the background 
	 */
	switch (fork()) {
	case -1:
		// can't fork
		exit(0);
		break;
	case 0:
		/* 
		 * child process 
		 */
		// fork ok
		(void)setsid();
		break;
	default:
		/* 
		 * parent process should just die 
		 */
		_exit(0);
	}
	int timeout = atoi(argv[1]);
	while (timeout) {
		FILE *fp = fopen("/tmp/.wpsdone", "rb");
		if (fp) {
			killall("ledtool", SIGKILL);
			nvram_set("wps_status", "1");
			nvram_commit();
			sysprintf("rm -f /tmp/.wpsdone");
			fclose(fp);
			led_control(LED_SES, LED_ON);
			break;
		}
		timeout--;
		sleep(1);
	}
	if (!timeout) {
		killall("ledtool", SIGKILL);
		nvram_set("wps_status", "1");
		nvram_commit();
		system("ledtool 1800 3");
	}
	return 0;
}				// end main
Ejemplo n.º 13
0
static void led_exit(void)
{

	int i;
	printk("%s\n", __FUNCTION__);
	printk("%s: mpshort = %d\n", __FUNCTION__, mpshort);
	printk("%s: mpint = %d\n",  __FUNCTION__, mpint);
	printk("%s: mplong = %d\n", __FUNCTION__, mplong);
	printk("%s: mpstring = %s\n", __FUNCTION__, mpstring);
	printk("%s: mparray[0] = %d\n", __FUNCTION__, mparray[0]);
	printk("%s: mparray[1] = %d\n", __FUNCTION__, mparray[1]);

	for(i = 0; i < ARRAY_SIZE(gpio_info); i++) {
		led_control(gpio_info[i].gpio, LED_OFF);
	}

	for(i = 0; i < ARRAY_SIZE(gpio_info); i++) {
		gpio_free(gpio_info[i].gpio);
	}
	
}
void flash_op_led(uint32 value)
{
	switch(value)
	{
	case 0:
		led_control(LED_SYS_GPIO_PIN, 1);
		led_control(LED_INTERNET_GPIO_PIN, 0);
		led_control(LED_WLAN2G_GPIO_PIN, 0);
		led_control(LED_WLAN5G_GPIO_PIN, 0);
		break;
	case 1:
		led_control(LED_SYS_GPIO_PIN, 0);
		led_control(LED_INTERNET_GPIO_PIN, 1);
		led_control(LED_WLAN2G_GPIO_PIN, 0);
		led_control(LED_WLAN5G_GPIO_PIN, 0);
		break;
	case 2:
		led_control(LED_SYS_GPIO_PIN, 0);
		led_control(LED_INTERNET_GPIO_PIN, 0);
		led_control(LED_WLAN2G_GPIO_PIN, 1);
		led_control(LED_WLAN5G_GPIO_PIN, 0);
		break;
	default:
		led_control(LED_SYS_GPIO_PIN, 0);
		led_control(LED_INTERNET_GPIO_PIN, 0);
		led_control(LED_WLAN2G_GPIO_PIN, 0);
		led_control(LED_WLAN5G_GPIO_PIN, 1);
		break;
	}
}
Ejemplo n.º 15
0
int main (void)
{
	unsigned pagenum = 0, backlight, contrast = 0x3f;
	unsigned left_pressed = 0, right_pressed = 0;
	unsigned up_pressed = 0, down_pressed = 0;
	extern const gpanel_font_t font_fixed6x8;

        led_init();
	joystick_init ();
	gpanel_init (&display, &font_fixed6x8);

	draw (pagenum);
        backlight = 1;
        gpanel_backlight (&display, backlight);

	/*
	 * Poll buttons.
	 */
	for (;;) {
		mdelay (20);
		draw_next (pagenum);

                int key = joystick_get();

                /* Light LED when a key is pressed. */
		if (key > JOYSTICK_IDLE)
		    led_control (1);
                else
		    led_control (0);

		if (key != JOYSTICK_LEFT)
			left_pressed = 0;
		else if (! left_pressed) {
			/* Left button: show previous page of symbols. */
			left_pressed = 1;
			pagenum = (pagenum - 1 + NPAGES) % NPAGES;
			draw (pagenum);
		}

		if (key != JOYSTICK_RIGHT)
			right_pressed = 0;
		else if (! right_pressed) {
			/* Right button: show next page of symbols. */
			right_pressed = 1;
			pagenum = (pagenum + 1) % NPAGES;
			draw (pagenum);
		}

		if (key != JOYSTICK_DOWN)
			down_pressed = 0;
		else if (! down_pressed) {
			/* Down button: switch backlight. */
			down_pressed = 1;
                        backlight = !backlight;
                        gpanel_backlight (&display, backlight);
		}

		if (key != JOYSTICK_UP)
			up_pressed = 0;
		else if (! up_pressed) {
			/* Up button: contrast control. */
			up_pressed = 1;
                        contrast++;
                        if (contrast >= 127)
                            contrast = 0;
                        gpanel_contrast (&display, contrast);
                        gpanel_move (&display, 0, 0);
                        printf (&display, "Vop = %-8u\n", contrast);
		}
	}
}
Ejemplo n.º 16
0
static void watchdog(void)
{
	int brand = getRouterBrand();
	int registered = -1;
	int radiostate0 = -1;
	int oldstate0 = -1;
	int radiostate1 = -1;
	int oldstate1 = -1;
	int counter = 0;
	int radioledinitcount = 0;
	int fd = open("/dev/misc/watchdog", O_WRONLY);
	if (fd == -1)
	    fd = open("/dev/watchdog", O_WRONLY);

	if (fd == -1) {
		return;
	}
	
#ifdef HAVE_MADWIFI
	int cnt = getdevicecount();
#else
	int cnt = get_wl_instances();
#endif
	
	
	while (1) {
		write(fd, "\0", 1);
		fsync(fd);

#ifdef HAVE_REGISTER
		if (!nvram_match("flash_active", "1")) {
			if (registered == -1)
				registered = isregistered_real();
			if (!registered)
				isregistered();	//to poll
		}
#endif
		/* 
		 * software wlan led control 
		 */
		if (radioledinitcount < 5) {
			radioledinitcount++;
			oldstate0 = -1;
			oldstate1 = -1;
		}
		 
#ifdef HAVE_MADWIFI
		if (!nvram_match("flash_active", "1")) {
			radiostate0 = get_radiostate("ath0");
			if (cnt == 2)
				radiostate1 = get_radiostate("ath1");
		}
#else
		wl_ioctl(get_wl_instance_name(0), WLC_GET_RADIO, &radiostate0, sizeof(int));
		if (cnt == 2)
			wl_ioctl(get_wl_instance_name(1), WLC_GET_RADIO, &radiostate1, sizeof(int));
#endif

		if (radiostate0 != oldstate0) {
#ifdef HAVE_MADWIFI
			if (radiostate0 == 1)
#else
			if ((radiostate0 & WL_RADIO_SW_DISABLE) == 0)
#endif
				led_control(LED_WLAN0, LED_ON);
			else {
				led_control(LED_WLAN0, LED_OFF);
#ifndef HAVE_MADWIFI
				/* 
				 * Disable wireless will cause diag led blink, so we want to
				 * stop it. 
				 */
				if (brand == ROUTER_WRT54G)
					diag_led(DIAG, STOP_LED);
				/* 
				 * Disable wireless will cause power led off, so we want to
				 * turn it on. 
				 */
				if (brand == ROUTER_WRT54G_V8)
					led_control(LED_POWER, LED_ON);
#endif
			}
			
			oldstate0 = radiostate0;
		}

		if (radiostate1 != oldstate1) {
#ifdef HAVE_MADWIFI
			if (radiostate1 == 1)
#else
			if ((radiostate1 & WL_RADIO_SW_DISABLE) == 0)
#endif
				led_control(LED_WLAN1, LED_ON);
			else {
				led_control(LED_WLAN1, LED_OFF);
			}

			oldstate1 = radiostate1;
		}
		/* 
		 * end software wlan led control 
		 */

		sleep(10);
		if (nvram_match("warn_enabled", "1")) {
			counter++;
			if (!(counter % 60))
				system("notifier&");	// 
		}
	}
}
Ejemplo n.º 17
0
void start_sysinit(void)
{
	time_t tm = 0;

	cprintf("sysinit() setup console\n");
	if (!nvram_match("disable_watchdog", "1"))
		eval("watchdog");
	/*
	 * Setup console 
	 */

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	/*
	 * network drivers 
	 */
#ifdef HAVE_WR1043
	fprintf(stderr, "load RTL Switch Driver\n");
	insmod("rtl8366rb_smi");
//	insmod("swconfig");
	insmod("rtl8366_smi");
	insmod("rtl8366rb");
#endif
	fprintf(stderr, "load ag71xx or ag7100_mod Ethernet Driver\n");
	system("insmod ag71xx || insmod ag7100_mod");
#ifdef HAVE_WZRG300NH
	system("swconfig dev rtl8366s set reset 1");
	system("swconfig dev rtl8366s set enable_vlan 0");
	system("swconfig dev rtl8366s set apply");
	FILE *fp = fopen("/dev/mtdblock/6", "rb");
	if (fp) {
		unsigned char buf2[256];
		fseek(fp, 0x1ff120c, SEEK_SET);
		fread(buf2, 256, 1, fp);
		fclose(fp);
		char mac[32];
		unsigned int copy[256];
		int i;
		for (i = 0; i < 256; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		fprintf(stderr, "configure eth1 to %s\n", mac);
		eval("ifconfig", "eth1", "hw", "ether", mac);
	}
#endif
#ifdef HAVE_WR1043

	FILE *fp = fopen("/dev/mtdblock/0", "rb");
	char mac[32];
	if (fp) {
		system("swconfig dev rtl8366rb set reset 1");
		system("swconfig dev rtl8366rb set enable_vlan 1");
		system("swconfig dev rtl8366rb vlan 1 set ports \"1 2 3 4 5t\"");
		system("swconfig dev rtl8366rb vlan 2 set ports \"0 5t\"");
		system("swconfig dev rtl8366s set apply");
		unsigned char buf2[256];
		fseek(fp, 0x1fc00, SEEK_SET);
		fread(buf2, 256, 1, fp);
		fclose(fp);
		unsigned int copy[256];
		int i;
		for (i = 0; i < 256; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		eval("ifconfig", "eth0", "up");
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth0", "1");
		eval("vconfig", "add", "eth0", "2");
		fprintf(stderr, "configure vlan1 to %s\n", mac);
		eval("ifconfig", "vlan1", "hw", "ether", mac);
		MAC_ADD(mac);
		fprintf(stderr, "configure vlan2 to %s\n", mac);
		eval("ifconfig", "vlan2", "hw", "ether", mac);
		MAC_SUB(mac);
	}
#endif
#ifdef HAVE_WA901
	FILE *fp = fopen("/dev/mtdblock/0", "rb");
	char mac[32];
	if (fp) {
		unsigned char buf2[256];
		fseek(fp, 0x1fc00, SEEK_SET);
		fread(buf2, 256, 1, fp);
		fclose(fp);
		unsigned int copy[256];
		int i;
		for (i = 0; i < 256; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		eval("ifconfig", "eth0", "up");
	}
#elif HAVE_WR941

	FILE *fp = fopen("/dev/mtdblock/0", "rb");
	char mac[32];
	if (fp) {
		unsigned char buf2[256];
		fseek(fp, 0x1fc00, SEEK_SET);
		fread(buf2, 256, 1, fp);
		fclose(fp);
		unsigned int copy[256];
		int i;
		for (i = 0; i < 256; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		eval("ifconfig", "eth0", "up");
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth0", "0");
		eval("vconfig", "add", "eth0", "1");
		fprintf(stderr, "configure vlan0 to %s\n", mac);
		MAC_SUB(mac);
		eval("ifconfig", "vlan0", "hw", "ether", mac);
		MAC_ADD(mac);
		MAC_ADD(mac);
		fprintf(stderr, "configure vlan1 to %s\n", mac);
		eval("ifconfig", "vlan1", "hw", "ether", mac);
		MAC_SUB(mac);
		MAC_SUB(mac);
	}
#endif
#ifdef HAVE_WRT160NL
	FILE *fp = fopen("/dev/mtdblock/0", "rb");
	unsigned char buf2[256];
	if (fp) {
#ifdef HAVE_E2100
		unsigned int firstoffset = 0x3f29a;
		unsigned int secondoffset = 0x3f288;
#else
		unsigned int firstoffset = 0x3f288;
		unsigned int secondoffset = 0x3f29a;
#endif
		fseek(fp, firstoffset, SEEK_SET);
		fread(buf2, 19, 1, fp);
		if (buf2[0]==0xff)
		    fseek(fp, secondoffset, SEEK_SET);
		    fread(buf2, 19, 1, fp);
		    
		fclose(fp);
		fprintf(stderr, "configure eth0 to %s\n", buf2);
		eval("ifconfig", "eth0", "hw", "ether", buf2);
		MAC_ADD(buf2);
		fprintf(stderr, "configure eth1 to %s\n", buf2);
		eval("ifconfig", "eth1", "hw", "ether", buf2);
	}
#endif
#ifdef HAVE_TG2521
	eval("ifconfig", "eth0", "hw", "ether", "00:11:22:33:44:55");
	eval("ifconfig", "eth1", "hw", "ether", "00:11:22:33:44:66");
	FILE *fp = fopen("/dev/mtdblock/7", "rb");
	char mac[32];
	if (fp) {
		unsigned char buf2[256];
		fseek(fp, 0x7d08c3, SEEK_SET);	// mac location
		fread(buf2, 6, 1, fp);
		fclose(fp);
		unsigned int copy[256];
		int i;
		for (i = 0; i < 6; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		MAC_ADD(mac);
		fprintf(stderr, "configure eth1 to %s\n", mac);
		eval("ifconfig", "eth1", "hw", "ether", mac);
		MAC_SUB(mac);
	}
#endif
#if defined(HAVE_TEW632BRP) || defined(HAVE_DIR615E)
	eval("ifconfig", "eth0", "hw", "ether", "00:11:22:33:44:55");
	eval("ifconfig", "eth1", "hw", "ether", "00:11:22:33:44:66");
	FILE *in = fopen("/dev/mtdblock/0", "rb");
	char *lanmac = NULL;
	if (in != NULL) {
		fseek(in, 0x20000, SEEK_SET);
		unsigned char *config = malloc(65536);
		memset(config, 0, 65536);
		fread(config, 65536, 1, in);
		int len = sizeof("lan_mac=");
		int i;
		int haslan = 0;
		int haswan = 0;
		for (i = 0; i < 65535 - 18; i++) {
			if (!haslan && !strncmp(&config[i], "lan_mac=", 8)) {
				haslan = 1;
				char *mac = &config[i + 8];
				if (mac[0] == '"')
					mac++;
				mac[17] = 0;
				lanmac = malloc(32);
				strcpy(lanmac, mac);
				eval("ifconfig", "eth0", "hw", "ether", mac);
				nvram_set("et0macaddr_safe", mac);
				nvram_set("et0macaddr", mac);
				if (haswan)
					break;
			}
			if (!haswan && !strncmp(&config[i], "wan_mac=", 8)) {
				haswan = 1;
				char *mac = &config[i + 8];
				if (mac[0] == '"')
					mac++;
				mac[17] = 0;
				eval("ifconfig", "eth1", "hw", "ether", mac);
				nvram_set("et0macaddr_safe", mac);
				nvram_set("et0macaddr", mac);
				if (haslan)
					break;
			}
		}
		free(config);
		fclose(in);
	}
#endif
	eval("ifconfig", "eth0", "up");
	eval("ifconfig", "eth1", "up");
	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		nvram_set("et0macaddr_safe",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		close(s);
	}
	detect_wireless_devices();
#ifdef HAVE_WRT160NL
	MAC_ADD(buf2);
	fprintf(stderr, "configure wifi0 to %s\n", buf2);
	eval("ifconfig", "wifi0", "hw", "ether", buf2);
	led_control(LED_POWER, LED_ON);
#endif
#if defined(HAVE_TEW632BRP) || defined(HAVE_DIR615E)
	if (lanmac != NULL) {
		fprintf(stderr, "configure wifi0 to %s\n", lanmac);
		eval("ifconfig", "wifi0", "hw", "ether", lanmac);
		free(lanmac);
	}
#endif
#ifdef HAVE_TG2521
	{
		fprintf(stderr, "configure wifi0 to %s\n", mac);
		eval("ifconfig", "wifi0", "hw", "ether", mac);
	}
//	eval("gpio", "disable", "5");	// enable usb port
#endif
#ifdef HAVE_WR1043
	{
		fprintf(stderr, "configure wifi0 to %s\n", mac);
		eval("ifconfig", "wifi0", "hw", "ether", mac);
	}
#endif
#ifdef HAVE_WR941
	{
		fprintf(stderr, "configure wifi0 to %s\n", mac);
		eval("ifconfig", "wifi0", "hw", "ether", mac);
	}
#endif

	led_control(LED_POWER, LED_ON);
	led_control(LED_SES, LED_OFF);
	led_control(LED_SES2, LED_OFF);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_WLAN1, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);

#ifdef HAVE_RS
	setWirelessLed(0,2);
	setWirelessLed(1,2);
	setWirelessLed(2,2);
#elif HAVE_WRT160NL
	setWirelessLed(0,6);
	writeproc("/proc/sys/dev/wifi0/ledpin","6");
	writeproc("/proc/sys/dev/wifi0/softled","1");
	system("swconfig dev eth0 set reset 1");
	system("swconfig dev eth0 set enable_vlan 1");
	system("swconfig dev eth0 vlan 1 set ports \"0 1 2 3 4 5\"");
#elif HAVE_WZRG300NH
	setWirelessLed(0,6);
#elif HAVE_TEW632BRP
	setWirelessLed(0,6);
#elif HAVE_WR941
	setWirelessLed(0,9);
#elif HAVE_WR1043
	setWirelessLed(0,9);
#else
	setWirelessLed(0,2);
#endif

	/*
	 * Set a sane date 
	 */
	stime(&tm);
	nvram_set("wl0_ifname", "ath0");

	return;
	cprintf("done\n");
}
Ejemplo n.º 18
0
int main(int argc, char **argv)
{
    /*
     * Run it in the background
     */
    switch (fork()) {
    case -1:
        // can't fork
        exit(0);
        break;
    case 0:
        /*
         * child process
         */
        // fork ok
        (void)setsid();
        break;
    default:
        /*
         * parent process should just die
         */
        _exit(0);
    }
    int times = atoi(argv[1]);
    int type = 0;
    int count = 0;
    if (argc > 2)
        type = atoi(argv[2]);

    while (times > 0) {
        switch (type) {
        case 1:
            led_control(LED_CONNECTED, LED_ON);
            usleep(500000);
            led_control(LED_CONNECTED, LED_OFF);
            usleep(500000);
            break;
        case 2:	// aoss negotiation
            led_control(LED_SES, LED_ON);
            usleep(200000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            led_control(LED_SES, LED_ON);
            usleep(200000);
            led_control(LED_SES, LED_OFF);
            usleep(500000);
            break;
        case 3:	// aoss error
            led_control(LED_SES, LED_ON);
            usleep(100000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            led_control(LED_SES, LED_ON);
            usleep(100000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            led_control(LED_SES, LED_ON);
            usleep(100000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            led_control(LED_SES, LED_ON);
            usleep(100000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            led_control(LED_SES, LED_ON);
            usleep(100000);
            led_control(LED_SES, LED_OFF);
            usleep(100000);
            break;

        default:
            led_control(LED_DIAG, LED_ON);
            usleep(500000);
            led_control(LED_DIAG, LED_OFF);
            usleep(500000);
            if (count && (count % 3) == 0)
                sleep(3);

            break;
        }
        times--;
        count++;
    }
    if (type == 3) {
        system("startservice ses_led_control");
    }

    return 0;
}				// end main
Ejemplo n.º 19
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;
}
Ejemplo n.º 20
0
static void usbled(int sig)
{
	usb_path1 = nvram_safe_get("usb_path1");
	usb_path2 = nvram_safe_get("usb_path2");
	status_usb_old = status_usb;
	status_usb = usb_status();

#ifdef LED_USB3
	if(model==MODEL_RTAC56U || model==MODEL_RTAC68U){
                got_usb2_old = got_usb2;
                got_usb2 = check_usb2();
                got_usb3_old = got_usb3;
                got_usb3 = check_usb3();
	}
#endif

	if(nvram_match("asus_mfg", "1")
#ifdef RTCONFIG_USBEJECT
                || !nvram_get_int("AllLED")
#endif
        )
		no_blink(sig);
	else if (!usb_busy
#ifdef RTCONFIG_USBEJECT
                && nvram_get_int("AllLED")
#endif
	)
	{
                if(model==MODEL_RTAC56U || model==MODEL_RTAC68U){
                        if(got_usb2 != got_usb2_old){
                                if(got_usb2)
                                        led_control(LED_USB, LED_ON);
                                else
                                        led_control(LED_USB, LED_OFF);
                        }
#ifdef LED_USB3
                        if(got_usb3 != got_usb3_old){
                                if(got_usb3)
                                        led_control(LED_USB3, LED_ON);
                                else
                                        led_control(LED_USB3, LED_OFF);
                        }
#endif
                }
		else if (status_usb != status_usb_old)
		{
			if (status_usb)
				led_control(LED_USB, LED_ON);
			else
				led_control(LED_USB, LED_OFF);
		}
	}
	else
#ifdef RTCONFIG_USBEJECT
                if (nvram_get_int("AllLED"))
#endif
	{
		if (strcmp(usb_path1, "storage") && strcmp(usb_path2, "storage"))
		{
			no_blink(sig);
		}
		else
		{
			count = (count+1) % 20;

			/* 0123456710 */
			/* 1010101010 */
			if (((count % 2) == 0) && (count > 8))
				led_control(LED_USB, LED_ON);
			else
				led_control(LED_USB, LED_OFF);
			alarmtimer(0, USBLED_URGENT_PERIOD);
		}
	}
}
Ejemplo n.º 21
0
void start_sysinit(void)
{
	time_t tm = 0;

	if (!nvram_match("disable_watchdog", "1"))
		eval("watchdog");
	/*
	 * Setup console 
	 */

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	/*
	 * network drivers 
	 */
	fprintf(stderr, "load ATH Ethernet Driver\n");
	system("insmod ag71xx || insmod ag7240_mod");
	FILE *fp = fopen("/dev/mtdblock/6", "rb");
	if (fp) {
		// fseek(fp, 0xFF0000, SEEK_SET);
		fseek(fp, DDMACOFFSET, SEEK_SET);
		unsigned char buf[20];
		fread(&buf[0], 6, 1, fp);
		char mac[20];
		int i;
		unsigned int copy[20];
		for (i = 0; i < 12; i++)
			copy[i] = buf[i] & 0xff;
		sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure ETH0 to %s\n", mac);
		nvram_set("et0macaddr_safe", mac);
		nvram_set("et0macaddr", mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		fread(&buf[6], 6, 1, fp);
		for (i = 0; i < 12; i++)
			copy[i] = buf[i] & 0xff;
		sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", copy[6], copy[7], copy[8], copy[9], copy[10], copy[11]);
		fprintf(stderr, "configure ETH1 to %s\n", mac);
		eval("ifconfig", "eth1", "hw", "ether", mac);

		fclose(fp);
	}
	// eval("ifconfig", "eth0", "up");
	// eval("ifconfig", "eth1", "up");
	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		nvram_set("et0macaddr_safe", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		close(s);
	}

	detect_wireless_devices();

	led_control(LED_POWER, LED_ON);
	led_control(LED_SES, LED_OFF);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);

	system2("echo 1 >/proc/sys/dev/wifi0/ledpin");
	system2("echo 1 >/proc/sys/dev/wifi0/softled");

	/*
	 * Set a sane date 
	 */
	stime(&tm);
	nvram_set("wl0_ifname", "ath0");

	return;
	cprintf("done\n");
}
Ejemplo n.º 22
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)) < 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

#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

	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;
	}
#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]);
	}
#endif
	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, "ATE")) {
		if( argc == 2 || argc == 3 || argc == 4) {
			asus_ate_command(argv[1], argv[2], argv[3]);
		}
		else
			printf("ATE_ERROR\n");
                return 0;
	}
#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
	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 RTCONFIG_WIRELESSREPEATER
	else if (!strcmp(base, "wlcscan")) {
		return wlcscan_main();
	}
	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
#ifdef RTCONFIG_BCMWL6
#ifdef ACS_ONCE
        else if (!strcmp(base, "acsd_restart_wl")) {
		restart_wireless_acsd();
		return 0;
        }
#endif
#endif
	else if (!strcmp(base, "add_multi_routes")) {
		return add_multi_routes();
	}
#ifndef OVERWRITE_DNS
	else if (!strcmp(base, "add_ns")) {
		return add_ns(argv[1]);
	}
	else if (!strcmp(base, "del_ns")) {
		return del_ns(argv[1]);
	}
#endif
	else if (!strcmp(base, "led_ctrl")) {
		return(led_control(atoi(argv[1]), atoi(argv[2])));
	}
	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;
}
Ejemplo n.º 23
0
int led_control_atomic(int which, int mode)
{
	int model;

	model = get_model();

	switch(which) {
		case LED_2G:
			if ((model == MODEL_RTN66U) || (model == MODEL_RTAC66U) || (model == MODEL_RTN16)) {
				if (mode == LED_ON)
					eval("wl", "-i", "eth1", "leddc", "0");
				else if (mode == LED_OFF)
					eval("wl", "-i", "eth1", "leddc", "1");
			} else if ((model == MODEL_RTAC56U) || (model == MODEL_RTAC56S)) {
				if (mode == LED_ON)
					eval("wl", "-i", "eth1", "ledbh", "3", "7");
				else if (mode == LED_OFF)
					eval("wl", "-i", "eth1", "ledbh", "3", "0");
			} else if ((model == MODEL_RTAC68U) || (model == MODEL_RTAC87U) || (model == MODEL_RTAC3200)) {
				if (mode == LED_ON)
					eval("wl", "ledbh", "10", "7");
				else if (mode == LED_OFF)
					eval("wl", "ledbh", "10", "0");
			} else if ((model == MODEL_RTAC88U) || (model == MODEL_RTAC3100) || (model == MODEL_RTAC5300)) {
				if (mode == LED_ON)
					eval("wl", "ledbh", "9", "7");
				else if (mode == LED_OFF)
					eval("wl", "ledbh", "9", "0");
			}
			break;
		case LED_5G_FORCED:
			if ((model == MODEL_RTAC68U) || (model == MODEL_RTAC3200)) {
				if (mode == LED_ON) {
					nvram_set("led_5g", "1");
		                        eval("wl", "-i", "eth2", "ledbh", "10", "7");
				} else if (mode == LED_OFF) {
					nvram_set("led_5g", "0");
					eval("wl", "-i", "eth2", "ledbh", "10", "0");
				}
			} else if ((model == MODEL_RTAC88U) || (model == MODEL_RTAC3100) || (model == MODEL_RTAC5300)) {
				if (mode == LED_ON)
					eval("wl", "-i", "eth2", "ledbh", "9", "7");
				else if (mode == LED_OFF)
					eval("wl", "-i", "eth2", "ledbh", "9", "0");
			}
			// Second 5 GHz radio
			if (model == MODEL_RTAC5300) {
				if (mode == LED_ON)
					eval("wl", "-i", "eth3", "ledbh", "9", "7");
				else if (mode == LED_OFF)
					eval("wl", "-i", "eth3", "ledbh", "9", "0");
			} else if (model == MODEL_RTAC3200) {
				if (mode == LED_ON)
					eval("wl", "-i", "eth3", "ledbh", "10", "7");
				else if (mode == LED_OFF)
					eval("wl", "-i", "eth3", "ledbh", "10", "0");
			}
			which = LED_5G;	// Fall through regular LED_5G to handle other models
		case LED_5G:
			if ((model == MODEL_RTN66U) || (model == MODEL_RTN16)) {
                                if (mode == LED_ON)
                                        eval("wl", "-i", "eth2", "leddc", "0");
                                else if (mode == LED_OFF)
                                        eval("wl", "-i", "eth2", "leddc", "1");
			} else if ((model == MODEL_RTAC66U) || (model == MODEL_RTAC56U) || (model == MODEL_RTAC56S)) {
				if (mode == LED_ON)
					nvram_set("led_5g", "1");
				else if (mode == LED_OFF)
					nvram_set("led_5g", "0");
			}
			break;
		case LED_SWITCH:
			if (mode == LED_ON) {
				eval("et", "robowr", "0x00", "0x18", "0x01ff");
				eval("et", "robowr", "0x00", "0x1a", "0x01ff");
			} else if (mode == LED_OFF) {
				eval("et", "robowr", "0x00", "0x18", "0x01e0");
				eval("et", "robowr", "0x00", "0x1a", "0x01e0");
			}
			break;
	}

	return led_control(which, mode);
}
Ejemplo n.º 24
0
void start_sysinit(void)
{
	time_t tm = 0;

	if (!nvram_match("disable_watchdog", "1"))
		eval("watchdog");
	/*
	 * Setup console 
	 */

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	/*
	 * network drivers 
	 */
	fprintf(stderr, "load ag71xx or ag7100_mod Ethernet Driver\n");
	system("insmod ag71xx || insmod ag7100_mod || insmod ag7240_mod");
	char mac1[32];
	char mac2[32];
	char wmac[32];
	FILE *fp = fopen("/dev/mtdblock/7", "rb");
	if (fp) {
		char mactmp[6];
		int copy[6];
		int i;
#ifdef HAVE_WNDR3700
		system("swconfig dev rtl8366s set reset 1");
		system("swconfig dev rtl8366s set enable_vlan 0");
		system("swconfig dev rtl8366s set blinkrate 2");
		system("swconfig dev rtl8366s port 1 set led 9");
		system("swconfig dev rtl8366s port 2 set led 6");
		system("swconfig dev rtl8366s port 5 set led 2");
		system("swconfig dev rtl8366s set apply");

#ifdef HAVE_WNDR3700V2
		fseek(fp, 0xff0000, SEEK_SET);
#else
		fseek(fp, 0x7f0000, SEEK_SET);
#endif
		fread(mactmp, 6, 1, fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac1, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		fread(mactmp, 6, 1, fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac2, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		fread(mactmp, 6, 1, fp);
		fclose(fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(wmac, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
#elif HAVE_WZRHPAG300NH
		system("swconfig dev eth0 set reset 1");
		system("swconfig dev eth0 set enable_vlan 0");
		system("swconfig dev eth0 vlan 1 set ports \"0 1 2 3 4\"");
		system("swconfig dev eth0 set apply");
		fseek(fp, 0x5120C, SEEK_SET);
		fread(mactmp, 6, 1, fp);
		fclose(fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac1, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		sprintf(mac2, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		MAC_ADD(mac2);
//		eval("gpio","enable","2");
#elif HAVE_WZRG300NH2
#ifndef HAVE_WZR300HP
		sysprintf("startservice bootloader_check");
#endif
		fseek(fp, 0x5120C, SEEK_SET);
		fread(mactmp, 6, 1, fp);
		fclose(fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac1, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		sprintf(mac2, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
//		eval("gpio","enable","13");
#ifdef HAVE_SWCONFIG
		system("swconfig dev eth0 set reset 1");
		system("swconfig dev eth0 set enable_vlan 1");
		if(nvram_match("wan_proto", "disabled") && nvram_match("fullswitch", "1")) {
			system("swconfig dev eth0 vlan 1 set ports \"0t 1 2 3 4 5\"");
		} else {
			system("swconfig dev eth0 vlan 1 set ports \"0t 1 3 4 5\"");
			system("swconfig dev eth0 vlan 2 set ports \"0t 2\"");
		}
		system("swconfig dev eth0 set apply");
#endif

		fprintf(stderr, "configure eth0 to %s\n", mac2);
		eval("ifconfig", "eth0", "hw", "ether", mac2);
		eval("ifconfig", "eth0", "up");
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth0", "1");
		eval("vconfig", "add", "eth0", "2");
		fprintf(stderr, "configure vlan1 to %s\n", mac2);
		eval("ifconfig", "vlan1", "hw", "ether", mac2);
		fprintf(stderr, "configure vlan2 to %s\n", mac2);
		eval("ifconfig", "vlan2", "hw", "ether", mac2);
#elif HAVE_WZRG450
		fseek(fp, 0x51002, SEEK_SET); //osprey eeprom mac location
		fread(mactmp, 6, 1, fp);
		fclose(fp);
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac1, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		sprintf(mac2, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
//		mac1[0] |= 0x02; // add private bit
//		mac2[0] |= 0x02;
//		eval("gpio","disable","16");
#ifdef HAVE_SWCONFIG
		system("swconfig dev switch0 set reset 1");
		system("swconfig dev switch0 set enable_vlan 1");
		if(nvram_match("wan_proto", "disabled") && nvram_match("fullswitch", "1")) {
			system("swconfig dev switch0 vlan 1 set ports \"0t 1 2 3 4 5\"");
		} else {
			system("swconfig dev switch0 vlan 1 set ports \"0t 2 3 4 5\"");
			system("swconfig dev switch0 vlan 2 set ports \"0t 1\"");
		}
		system("swconfig dev switch0 set apply");
#endif

		fprintf(stderr, "configure eth0 to %s\n", mac2);
		eval("ifconfig", "eth0", "hw", "ether", mac2);
		eval("ifconfig", "eth0", "up");
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth0", "1");
		eval("vconfig", "add", "eth0", "2");
		fprintf(stderr, "configure vlan1 to %s\n", mac2);
		eval("ifconfig", "vlan1", "hw", "ether", mac2);
		fprintf(stderr, "configure vlan2 to %s\n", mac2);
		eval("ifconfig", "vlan2", "hw", "ether", mac2);
#else
		system("swconfig dev eth0 set reset 1");
		system("swconfig dev eth0 set enable_vlan 0");
		system("swconfig dev eth0 vlan 1 set ports \"0 1 2 3 4\"");
		system("swconfig dev eth0 set apply");
		fseek(fp, 0x7f120c, SEEK_SET);
		fread(mactmp, 6, 1, fp);
		fclose(fp);
		for (i = 5; i >= 3; i--)
			if (++mactmp[i] != 0x00)
				break;	// dont know what this is 
		for (i = 0; i < 6; i++)
			copy[i] = mactmp[i];
		for (i = 0; i < 6; i++)
			copy[i] &= 0xff;
		sprintf(mac1, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		sprintf(mac2, "%02X:%02X:%02X:%02X:%02X:%02X", copy[0],
			copy[1], copy[2], copy[3], copy[4], copy[5]);
		MAC_ADD(mac2);
#endif

	} else {
		sprintf(mac1, "00:11:22:33:44:55");
		sprintf(mac2, "00:11:22:33:44:66");
	}
#ifndef HAVE_WZRG450
	eval("ifconfig", "eth0", "hw", "ether", mac1);
	eval("ifconfig", "eth0", "up");
	eval("ifconfig", "eth1", "hw", "ether", mac2);
	eval("ifconfig", "eth1", "up");
#else
	eval("ifconfig", "eth0", "hw", "ether", mac2);
	eval("ifconfig", "eth0", "up");
#endif
	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		nvram_set("et0macaddr_safe",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		close(s);
	}
	detect_wireless_devices();
#ifdef HAVE_WZRHPAG300NH
//	eval("ifconfig", "wifi1", "hw", "ether", wmac);
	setWirelessLedPhy0(1);
	setWirelessLedPhy1(5);

#else
#ifndef HAVE_WNDR3700

#ifdef HAVE_WZRG300NH2
	setWirelessLedPhy0(5);
#else
#ifndef HAVE_WZRG450
	setWirelessLedGeneric(0,6);
	setWirelessLedGeneric(1,6);
#endif
#endif
#else
	eval("ifconfig", "wifi0", "hw", "ether", mac1);
	eval("ifconfig", "wifi1", "hw", "ether", wmac);
	setWirelessLedPhy0(5);
	setWirelessLedPhy1(5);
#endif
#endif

	led_control(LED_POWER, LED_ON);
	led_control(LED_SES, LED_OFF);
	led_control(LED_SES2, LED_OFF);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_WLAN1, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);
	
	getRouterBrand(); // restore some default settings

	if (!nvram_get("ath0_rxantenna"))
		nvram_set("ath0_rxantenna", "3");
	if (!nvram_get("ath0_txantenna"))
		nvram_set("ath0_txantenna", "3");
	if (!nvram_get("ath1_rxantenna"))
		nvram_set("ath1_rxantenna", "3");
	if (!nvram_get("ath1_txantenna"))
		nvram_set("ath1_txantenna", "3");

	/*
	 * Set a sane date 
	 */
	stime(&tm);
	nvram_set("wl0_ifname", "ath0");

	return;
	cprintf("done\n");
}
Ejemplo n.º 25
0
int init_gpio(void)
{
	char *btn_list[] = { "btn_rst_gpio", "btn_wps_gpio", "fan_gpio", "have_fan_gpio"
#ifdef RTCONFIG_WIRELESS_SWITCH
		, "btn_wifi_gpio"
#endif
#ifdef RTCONFIG_WIFI_TOG_BTN
		, "btn_wltog_gpio"
#endif
#ifdef RTCONFIG_SWMODE_SWITCH
#if defined(PLAC66U)
		, "btn_swmode1_gpio"
#else
		, "btn_swmode1_gpio", "btn_swmode2_gpio", "btn_swmode3_gpio"
#endif	/* Mode */
#endif	/* RTCONFIG_SWMODE_SWITCH */
#ifdef RTCONFIG_TURBO
		, "btn_turbo_gpio"
#endif
#ifdef RTCONFIG_LED_BTN
		, "btn_led_gpio"
#endif
#ifdef RTCONFIG_INTERNAL_GOBI
		, "btn_lte_gpio"
#endif
	};
	char *led_list[] = { "led_turbo_gpio", "led_pwr_gpio", "led_usb_gpio", "led_wps_gpio", "fan_gpio", "have_fan_gpio", "led_lan_gpio", "led_wan_gpio", "led_usb3_gpio", "led_2g_gpio", "led_5g_gpio" 
#ifdef RTCONFIG_LAN4WAN_LED
		, "led_lan1_gpio", "led_lan2_gpio", "led_lan3_gpio", "led_lan4_gpio"
#endif  /* LAN4WAN_LED */
#ifdef RTCONFIG_LED_ALL
		, "led_all_gpio"
#endif
		, "led_wan_red_gpio"
#ifdef RTCONFIG_QTN
		, "reset_qtn_gpio"
#endif
#ifdef RTCONFIG_USBRESET
		, "pwr_usb_gpio"
		, "pwr_usb_gpio2"
#endif
#ifdef RTCONFIG_WIFIPWR
		, "pwr_2g_gpio"
		, "pwr_5g_gpio"
#endif
#ifdef RTCONFIG_INTERNAL_GOBI
		, "led_3g_gpio", "led_lte_gpio", "led_sig1_gpio", "led_sig2_gpio", "led_sig3_gpio", "led_sig4_gpio"
#endif
#if (defined(PLN12) || defined(PLAC56))
		, "plc_wake_gpio"
		, "led_pwr_red_gpio"
		, "led_2g_green_gpio", "led_2g_orange_gpio", "led_2g_red_gpio"
		, "led_5g_green_gpio", "led_5g_orange_gpio", "led_5g_red_gpio"
#endif
#ifdef RTCONFIG_MMC_LED
		, "led_mmc_gpio"
#endif
#if defined(RTCONFIG_RTAC5300) || defined(RTCONFIG_RTAC5300R)
		, "rpm_fan_gpio"
#endif
#ifdef RTCONFIG_RESET_SWITCH
		, "reset_switch_gpio"
#endif
			   };
	int use_gpio, gpio_pin;
	int enable, disable;
	int i;

#ifdef RTCONFIG_INTERNAL_GOBI
	void get_gpio_values_once(int);
	get_gpio_values_once(0);		// for filling data to led_gpio_table[]
#endif	/* RTCONFIG_INTERNAL_GOBI */

	/* btn input */
	for(i = 0; i < ASIZE(btn_list); i++)
	{
		if (!nvram_get(btn_list[i]))
			continue;
		use_gpio = nvram_get_int(btn_list[i]);
		if((gpio_pin = use_gpio & 0xff) == 0xff)
			continue;
		gpio_dir(gpio_pin, GPIO_DIR_IN);
	}

	/* led output */
	for(i = 0; i < ASIZE(led_list); i++)
	{
		if (!nvram_get(led_list[i]))
			continue;
#if defined(RTCONFIG_ETRON_XHCI_USB3_LED)
		if (!strcmp(led_list[i], "led_usb3_gpio") && nvram_match("led_usb3_gpio", "etron")) {
			led_control(LED_USB3, LED_OFF);
			continue;
		}
#endif
		use_gpio = nvram_get_int(led_list[i]);

		if((gpio_pin = use_gpio & 0xff) == 0xff)
			continue;

#if defined(RTCONFIG_RALINK_MT7620)
		if(gpio_pin == 72)	//skip 2g wifi led NOT to be gpio LED
			continue;
#endif

		disable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 0: 1;
		gpio_dir(gpio_pin, GPIO_DIR_OUT);

		/* If WAN RED LED is defined, keep it on until Internet connection ready in router mode. */
		if (!strcmp(led_list[i], "led_wan_red_gpio") && nvram_get_int("sw_mode") == SW_MODE_ROUTER)
			disable = !disable;

		set_gpio(gpio_pin, disable);
#ifdef RTCONFIG_INTERNAL_GOBI	// save setting value
		{ int i; char led[16]; for(i=0; i<LED_ID_MAX; i++) if(gpio_pin == (led_gpio_table[i]&0xff)){snprintf(led, sizeof(led), "led%02d", i); nvram_set_int(led, LED_OFF); break;}}
#endif	/* RTCONFIG_INTERNAL_GOBI */
	}

#if (defined(PLN12) || defined(PLAC56))
	if((gpio_pin = (use_gpio = nvram_get_int("led_pwr_red_gpio")) & 0xff) != 0xff)
#else
	if((gpio_pin = (use_gpio = nvram_get_int("led_pwr_gpio")) & 0xff) != 0xff)
#endif
	{
		enable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 1 : 0;
		set_gpio(gpio_pin, enable);
#ifdef RTCONFIG_INTERNAL_GOBI	// save setting value
		{ int i; char led[16]; for(i=0; i<LED_ID_MAX; i++) if(gpio_pin == (led_gpio_table[i]&0xff)){snprintf(led, sizeof(led), "led%02d", i); nvram_set_int(led, LED_ON); break;}}
#endif	/* RTCONFIG_INTERNAL_GOBI */
	}

	// Power of USB.
	if((gpio_pin = (use_gpio = nvram_get_int("pwr_usb_gpio")) & 0xff) != 0xff){
		enable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 1 : 0;
		set_gpio(gpio_pin, enable);
	}
	if((gpio_pin = (use_gpio = nvram_get_int("pwr_usb_gpio2")) & 0xff) != 0xff){
		enable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 1 : 0;
		set_gpio(gpio_pin, enable);
	}

#if defined(RTCONFIG_RTAC5300) || defined(RTCONFIG_RTAC5300R)
	// RPM of FAN
	if((gpio_pin = (use_gpio = nvram_get_int("rpm_fan_gpio")) & 0xff) != 0xff){
	enable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 1 : 0;
	set_gpio(gpio_pin, enable);
	}
#endif

#ifdef PLAC56
	if((gpio_pin = (use_gpio = nvram_get_int("plc_wake_gpio")) & 0xff) != 0xff){
		enable = (use_gpio&GPIO_ACTIVE_LOW)==0 ? 1 : 0;
		set_gpio(gpio_pin, enable);
	}
#endif

	// TODO: system dependent initialization
	return 0;
}
Ejemplo n.º 26
0
/*==============================================================================
*   MODULE        : main
*   FUNCTION      : IR Remocon リモコンメイン関数
*   ARGUMENT      : none
*   RETURN        : none
*   NOTE          : none
*===============================================================================*/
void main()
{
    unsigned char   i;              /* LED 点滅回数カウンタ         */
    unsigned char   ir_state;       /* 受信状態 (成功/不明/ノイズ)  */
    unsigned char   key_code;       /* キーコード取得用             */
    unsigned char   func_key_type;  /* ファンクションキー種別       */
    unsigned char   eep_offset;     /* EEPROM保存先 オフセット      */


    /* PORT A/B/C 入出力設定 (1b:Input 0b:Output)   */
    TRISA   = 0xCF; /* Port A 入出力設定            */
	TRISB   = 0x00; /* Port B 入出力設定            */    /* masa すべてのPORTをOUTPUTにする。*/
    //TRISB   = 0xC1; /* Port B 入出力設定            */
    TRISC   = 0x81; /* Port C 入出力設定            */

    /* A/Dコンバータ設定                            */
    ADCON0  = 0x00; /* ADコンバータ電源OFF(未使用)  */
    ANSEL   = 0x00; /* AN0~AN7  Pin Digital I/O     */
    ANSELH  = 0x00; /* AN8~AN13 Pin Digital I/O     */

    /* コンパレータ設定                             */
    CM1CON0 = 0x07; /* Comparator 1 Disable         */
    CM2CON0 = 0x07; /* Comparator 2 Disable         */

    /* キャリア周波数設定 (PWM用 TIMER2 の設定)     */
    PR2     = 0x19; /* 38KHz (1cycle = 25~26us)     */
    T2CON   = 0x0C; /* Postscaler   -> 1:2          */
                    /* Timer2       -> ON           */
                    /* Prescaler    -> 1            */
    CCPR2L  = 0x0C; /* Duty         -> 50% (0x32)   */
                    /* CCPR2L:1100b                 */
                    /* CCP2CON(bit5~4):10b->110010b */
    CCP2CON = PWM_STOP; /* PWM      -> OFF          */
                        /* 2LSB of duty cycle->10b  */

    /* 受信データ解析用 TIMER1 設定                 */
    T1CON   = 0x01; /* Prescaler      -> 1:1 (65ms) */
                    /* Clock Source   -> Internal   */
                    /* Timer1        -> Start       */
    TMR1L   = 0;    /* Timer1 Value MSB 8bit Clear  */
    TMR1H   = 0;    /* Timer1 Value LSB 8bit Clear  */
    TMR1IF  = 0;    /* Timer1 Interrupt Flag Clear  */
    TMR1IE  = 1;    /* Timer1 Interrupt Enable      */

    /* Port 初期化 */
    PORTA   = 0x00; /* PortA RA7~0:Lo               */
    PORTB   = 0x00; /* PortB RB7~1:Lo    RB0:Hi     */    /* masa */
	//PORTB   = 0x01; /* PortB RB7~1:Lo    RB0:Hi     */
    PORTC   = 0x01; /* PortC RC7~1:Lo    RC0:Hi     */

    /****************************************************************/
    /* Dip SW が両方 Hi ⇒ 送信モード                               */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_1) {
        /* Function Type Init (Function 1 で初期化) */
        func_key_type = KEY_CODE01;
        /* Function1 LED On */
        led_control(LED_MASK);

        for (;;)
        {
            /* Key Check */
            key_code = key_input_check();

            /* Key 押下なし -> CPU Sleep    */
            if (key_code == KEY_OFF) {
                /* CPU Sleep -> Wake Up     */
                cpu_sleep();
            }
            /* Key 押下あり -> 何れかの動作 */
            else {
                /* Function Key 押下された  */
                if (key_code <= KEY_CODE04) {
                    /* Function Type 保持   */
                    func_key_type = key_code;
                    /* 対応した LED On      */
                    led_control((LED_MASK << key_code));
                }
                /* 動作キーが押下された     */
                else {
                    /* 対応したコードを送信 */
                    ir_out_start(func_key_type, key_code);
                }
            }
        }
    }

    /****************************************************************/
    /* Dip SW 1:Lo  Dip SW 2:Hi ⇒ 受信モード (EEPROMへの保存)      */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_2) {
        /* Function LED All Off */
        led_control(ALL_ON);

        for (;;) {
            /* Key Check */
            key_code = key_input_check();
            /* Function Key が押されたら受信モードへ    */
            if (key_code <= KEY_CODE04) {
                /* Function Key Code 保持               */
                func_key_type = key_code;
                /* Key に対応した LED 点灯              */
                led_control((LED_MASK << key_code));
                break;
            } else {
                /* Key 押下されるまでチェックを続ける   */
                ;
            }
        }

        /* 何か受信するまでIRチェック */
        for (;;) {
            /* 赤外線コード受信                         */
            ir_state = ir_recieve();
            /* 受信成功 (NEC/家電協フォーマット)        */
            if (ir_state == SUCCESS) {
                /* LED制御 & データ保存処理へ遷移       */
                break;
            }
            /* 不明のフォーマットを受信                 */
            else if (ir_state == UNKNOWN) {
                for (;;) {
                    /* 電源OFFまで 150ms 間隔で全LED点滅    */
                    led_control(ALL_OFF);
                    __delay_ms(150);
                    led_control(ALL_ON);
                    __delay_ms(150);
                }
            }
            /* 何らかのノイズを受信                     */
            else {
                /* もう一度受信処理                     */
                ;
            }
        }

        /* 受信完了状態通知 */
        for (i=0; i<2; i++) {
            /* 選択した Key に対応した LED 点滅 (2回)   */
            /* 150ms 間隔で点滅                         */
            led_control(ALL_OFF);
            __delay_ms(150);
            led_control((LED_MASK << func_key_type));
            __delay_ms(150);
        }
        /* IR format 一時保持       */
        eep_wdata.format = rx_format;
        /* 受信データ一時保持       */
        memcpy(&eep_wdata.data, &rcv_data, sizeof(rcv_data));
        /* EEPROM 書込み先取得      */
        eep_offset = (key_code * EEPROM_DATA_SIZE);
        /* FormatをEEPROMへ書込み   */
        EEPROM_WRITE(eep_offset, eep_wdata.format);
        /* 書込んだ分オフセット移動 */
        eep_offset++;
        /* DataCodeをEEPROMへ書込み */
        for (i=0; i < TBL_CODE_SIZE; i++) {
            /* HI-TECH C 標準関数   */
            /* 1byte ずつ書込み     */
            EEPROM_WRITE((eep_offset + i), eep_wdata.data[i]);
        }
        /* IR Data 記録後無限ループ */
        for (;;);
    }

    /****************************************************************/
    /* Dip SW 1:Hi  Dip SW 2:Lo ⇒ 学習モード (EEPROM Data 送信)    */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_3) {
        /* EEPROM Data を RAM へ展開 */
        for (i = 0; i < EEPROM_TABLE_SIZE; i++) {
            eep_rdata[i] = EEPROM_READ(i);
        }

        for (;;)
        {
            /* Key Check */
            key_code = key_input_check();

            /* KEYが押されてなかったらSleepにする   */
            if (key_code == KEY_OFF) {
                /* CPU Sleep -> Key INT -> Wake Up  */
                cpu_sleep();
            }
            else {
                /* Function Key (4つ) のみ対応      */
                if (key_code <= KEY_CODE04) {
                    /* Key に対応したRAM読込先取得  */
                    eep_offset = (key_code * EEPROM_DATA_SIZE);
                    /* Data存在する場合のみ送信     */
                    if ((eep_rdata[eep_offset] == FORM_NEC) ||
                        (eep_rdata[eep_offset] == FORM_KDN)) {
                        /* 送信中 -> 対応したLED On */
                        led_control((LED_MASK << key_code));
                        /* フォーマット -> NEC      */
                        if (eep_rdata[eep_offset] == FORM_NEC) {
                            /* Keyに対応したDataを  */
                            /* NEC formatで送信     */
                            /* 読込んだ分オフセット移動 */
                            eep_offset++;
                            IR_NEC_format((unsigned char*)&eep_rdata[eep_offset]);
                        }
                        /* フォーマット -> 家電協   */
                        else {
                            /* Keyに対応したDataを  */
                            /* 家電協 formatで送信  */
                            /* 読込んだ分オフセット移動 */
                            eep_offset++;
                            IR_KDN_format((unsigned char*)&eep_rdata[eep_offset]);
                        }
                        /* 送信終了 -> LED Off      */
                        led_control(ALL_OFF);
                    }
                }
            }
        }
    }
    /****************************************************************/
    /* Dip SW 1:Lo  Dip SW 2:Lo ⇒ LCD表示モード                   */
	/* このモードがmainの役目を果たす                              */
    /****************************************************************/
    if ((PORTA & MODE_MASK) == RUN_MODE_4) {
        /* LCD Initialize       */
        lcd_init();
        /* IR 比較データ初期化  */
        memset(&pre_data, 0x00, sizeof(pre_data));
        for (;;)
        {
            /* IR受信 */
            ir_state = ir_recieve();

        	
        	/*以下がmotion controlを制御するpart  masa */
        	switch(rcv_data[5]){
        	case FORWARD:
        		motion_control(MOVE_FORWARD);
        		break;
        	case BACKWARD:
        		motion_control(MOVE_BACKWARD);
        		break;
        	case STOP:
        		motion_control(MOVE_STOP);
        		break;
        	case LEFT:
        		motion_control(MOVE_LEFT);
        		break;
        	case RIGHT:
        		motion_control(MOVE_RIGHT);
        		break;
        	}
        	/* ここまで   masa  */
        	
        	
        	/* 受信データと比較データが異なる場合のみ表示を更新         */
//            if ((memcmp(&pre_data, &rcv_data, sizeof(rcv_data))) != 0) {    /* comment out 開放 masa  */
            if ((memcmp(&pre_data, &rcv_data, sizeof(rcv_data))) != 0) {
                if (ir_state == SUCCESS) {
                    lcd_clear();                    /* LCD All Clear        */
                    lcd_put_ir_format(rx_format);   /* IR format Type 表示  */
                    switch (rx_format) {
                      case FORM_NEC:        /* 受信コード = NEC format      */
                        /* NEC format の IR 受信データ表示                  */
                        lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_NEC);
                        break;
                      case FORM_KDN:        /* 受信コード = 家電協 format   */
                        /* 家電協 format の IR 受信データ表示               */
                        lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_KDN);
                        break;
                      default:              /* 受信コード = 未対応 format   */
                        break;
                    }
                } else if (ir_state == UNKNOWN) {
                    /* 未対応 format の IR 受信データ表示               */
                    lcd_clear();                    /* LCD All Clear        */
                    lcd_put_ir_format(FORM_UKN);   /* IR format Type 表示  */
//                    lcd_put_ir_data(&rcv_data, FORMAT_DISP_SIZE_UKN);
                } else {
                    ;   /* ノイズの為、もう一度受信処理 */
                }
                /* IR 比較データ保持 */
                memcpy(&pre_data, &rcv_data, sizeof(rcv_data));
            }
        }
    }
}
Ejemplo n.º 27
0
void start_sysinit(void)
{
	time_t tm = 0;

	if (!nvram_match("disable_watchdog", "1"))
		eval("watchdog");
	/*
	 * Setup console 
	 */

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	/*
	 * network drivers 
	 */
	fprintf(stderr, "load ATH Ethernet Driver\n");
	system("insmod ag71xx || insmod ag7240_mod");
	insmod("ledtrig-netdev");

	FILE *fp = fopen("/dev/mtdblock/0", "rb");
	char mac[32];
	if (fp) {
		unsigned char buf2[256];
		fseek(fp, 0x1fc00, SEEK_SET);
		fread(buf2, 256, 1, fp);
		fclose(fp);
		unsigned int copy[256];
		int i;
		for (i = 0; i < 256; i++)
			copy[i] = buf2[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x",
			copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr, "configure eth0 to %s\n", mac);
		MAC_SUB(mac);
		eval("ifconfig", "eth0", "hw", "ether", mac);
		MAC_ADD(mac);
		MAC_ADD(mac);
		fprintf(stderr, "configure eth1 to %s\n", mac);
		eval("ifconfig", "eth1", "hw", "ether", mac);
#ifndef HAVE_ATH9K
		MAC_SUB(mac);
#endif
	}

	eval("ifconfig", "eth0", "up");
	eval("ifconfig", "eth1", "up");

#ifdef HAVE_SWCONFIG

#ifdef HAVE_WDR2543
		system("swconfig dev switch0 set reset 1");
		system("swconfig dev switch0 set enable_vlan 1");
		system("swconfig dev switch0 vlan 1 set ports \"1 2 3 4 9t\"");
		system("swconfig dev switch0 vlan 2 set ports \"0 9t\"");
		system("swconfig dev switch0 set apply");
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth0", "1");
		eval("vconfig", "add", "eth0", "2");

#else
		system("swconfig dev eth1 set reset 1");
		system("swconfig dev eth1 set enable_vlan 0");
		system("swconfig dev eth1 vlan 1 set ports \"0 1 2 3 4\"");
		system("swconfig dev eth1 set apply");
	setEthLED(17,"eth0");
	setSwitchLED(13,0x2);
	setSwitchLED(14,0x4);
	setSwitchLED(15,0x8);
	setSwitchLED(16,0x10);
#endif

#endif

	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		nvram_set("et0macaddr_safe",
			  ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data,
				     eabuf));
		close(s);
	}
	detect_wireless_devices();
#ifndef HAVE_ATH9K
	fprintf(stderr, "configure wifi0 to %s\n", mac);
	eval("ifconfig", "wifi0", "hw", "ether", mac);
#endif
	//enable wlan led (card gpio based)
#if defined(HAVE_WR841v7) || defined(HAVE_WR842) || defined(HAVE_MR3420)
	setWirelessLedPhy0(0);
#else
	setWirelessLedPhy0(1);
#endif
	led_control(LED_POWER, LED_ON);
	led_control(LED_SES, LED_OFF);
	led_control(LED_SES2, LED_OFF);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_WLAN1, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);

	/*
	 * Set a sane date 
	 */
	stime(&tm);
	nvram_set("wl0_ifname", "ath0");

	return;
	cprintf("done\n");
}
Ejemplo n.º 28
0
void start_sysinit(void)
{
	char buf[PATH_MAX];
	struct stat tmp_stat;
	time_t tm = 0;

	if (!nvram_match("disable_watchdog", "1")) {
		insmod("imx2_wdt");
		eval("watchdog");
	}
	/*
	 * Setup console 
	 */
	eval("mount", "-o", "remount,rw", "/");
	eval("mkdir", "-p", "/usr/local/nvram");

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	int brand = getRouterBrand();

	//for extension board
	struct ifreq ifr;
	int s;

	fprintf(stderr, "try modules for ethernet adapters\n");
	nvram_set("intel_eth", "0");
	insmod("sky2");
	if (detect_ethernet_devices())
		nvram_set("intel_eth", "1");

	/*
	 * network drivers 
	 */
	detect_wireless_devices();

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		nvram_set("et0macaddr_safe", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		close(s);
	}
	eval("ifconfig", "eth0", "promisc");
	eval("ifconfig", "eth1", "promisc");
	/*
	 * Set a sane date 
	 */
	stime(&tm);
	nvram_set("wl0_ifname", "ath0");
	eval("hwclock", "-s");
	eval("i2cset", "-f", "-y", "0", "0x20", "0", "0x0");
	eval("i2cset", "-f", "-y", "0", "0x20", "11", "0x10");
	char *board = nvram_safe_get("DD_BOARD");
	char *board2 = nvram_safe_get("DD_BOARD2");
	if (!strncmp(board, "Gateworks Ventana GW54",22)
	    || !strncmp(board2, "Gateworks Ventana GW54",22))
		sysprintf("gsp_updater -f /etc/gsc_5400_v43.txt 43");

	if (!strncmp(board, "Gateworks Ventana GW53",22)
	    || !strncmp(board2, "Gateworks Ventana GW53",22))
		sysprintf("gsp_updater -f /etc/gsc_5300_v43.txt 43");

	if (!strncmp(board, "Gateworks Ventana GW52",22)
	    || !strncmp(board2, "Gateworks Ventana GW52",22))
		sysprintf("gsp_updater -f /etc/gsc_5200_v43.txt 43");

	if (!strncmp(board, "Gateworks Ventana GW51",22)
	    || !strncmp(board2, "Gateworks Ventana GW51",22))
		sysprintf("gsp_updater -f /etc/gsc_5100_v43.txt 43");

	led_control(LED_POWER, LED_ON);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_SES, LED_OFF);
	led_control(LED_SES2, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_WLAN1, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);
	sysprintf("echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor");

	return;
}
Ejemplo n.º 29
0
void start_sysinit(void)
{
	char buf[PATH_MAX];
	struct stat tmp_stat;
	time_t tm = 0;

	mknod("/dev/mmc", S_IFBLK | 0660, makedev(126, 0));
	mknod("/dev/mmc0", S_IFBLK | 0660, makedev(126, 1));
	mknod("/dev/mmc1", S_IFBLK | 0660, makedev(126, 2));
	mknod("/dev/mmc2", S_IFBLK | 0660, makedev(126, 3));
	mknod("/dev/mmc3", S_IFBLK | 0660, makedev(126, 4));
	mknod("/dev/gpio", S_IFCHR | 0644, makedev(252, 0));

	/*
	 * Setup console 
	 */

	cprintf("sysinit() klogctl\n");
	klogctl(8, NULL, atoi(nvram_safe_get("console_loglevel")));
	cprintf("sysinit() get router\n");

	/*
	 * load some netfilter stuff 
	 */

//    eval( "watchdog" );
	/*
	 * Set a sane date 
	 */

	stime(&tm);
	nvram_set("wl0_ifname", "ra0");
	insmod("rt2860v2_ap");
	insmod("RTPCI_ap");
	insmod("raeth");
#ifdef HAVE_WHR300HP2
	insmod("rt2880_wdt");


	FILE *in = fopen("/dev/mtdblock/2", "rb");
	unsigned char mac[32];
	if (in != NULL) {
		fseek(in, 4, SEEK_SET);
		fread(mac, 6, 1, in);
		fclose(in);
		unsigned int copy[6];
		int i;
		for (i = 0; i < 6; i++)
			copy[i] = mac[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		fprintf(stderr,"configure mac address to %s\n",mac);
		if (!strcmp(mac, "ff:ff:ff:ff:ff:ff"))
			eval("ifconfig", "eth0", "hw", "ether", "00:11:22:33:44:55");
		else
			eval("ifconfig", "eth0", "hw", "ether", mac);
	}

/*	system("swconfig dev eth0 set reset 1");
	system("swconfig dev eth0 set enable_vlan 1");
	system("swconfig dev eth0 vlan 1 set ports \"0 1 2 3 6t\"");
	system("swconfig dev eth0 vlan 2 set ports \"4 6t\"");
	system("swconfig dev eth0 set apply");*/
	
	//LAN/WAN ports as security mode
	sysprintf("switch reg w 2004 ff0003");
	sysprintf("switch reg w 2104 ff0003");
	sysprintf("switch reg w 2204 ff0003");
	sysprintf("switch reg w 2304 ff0003");
	sysprintf("switch reg w 2404 ff0003");
	sysprintf("switch reg w 2504 ff0003");
	//LAN/WAN ports as transparent port
	sysprintf("switch reg w 2010 810000c0");
	sysprintf("switch reg w 2110 810000c0");
	sysprintf("switch reg w 2210 810000c0");
	sysprintf("switch reg w 2310 810000c0");	
	sysprintf("switch reg w 2410 810000c0");
	sysprintf("switch reg w 2510 810000c0");
	//set CPU/P7 port as user port
	sysprintf("switch reg w 2610 81000000");
	sysprintf("switch reg w 2710 81000000");

	sysprintf("switch reg w 2604 20ff0003");// #port6, Egress VLAN Tag Attribution=tagged
	sysprintf("switch reg w 2704 20ff0003");// #port7, Egress VLAN Tag Attribution=tagged
	

	sysprintf("switch reg w 2014 10001");
	sysprintf("switch reg w 2114 10001");
	sysprintf("switch reg w 2214 10001");
	sysprintf("switch reg w 2314 10001");
	sysprintf("switch reg w 2414 10002");
	sysprintf("switch reg w 2514 10001");
	//VLAN member port
	sysprintf("switch vlan set 0 1 11110111");
	sysprintf("switch vlan set 1 2 00001011");
	sysprintf("switch clear");
	eval("ifconfig", "eth0", "up");
	
	eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
	eval("vconfig", "add", "eth0", "1");	//LAN
	eval("vconfig", "add", "eth0", "2");	//WAN

	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr_safe", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		close(s);
	}

#else

#if defined(HAVE_DIR600) && !defined(HAVE_ALL02310N)
	writeproc("/proc/rt3052/mii/ctrl", "write 0 0 0x3300");
	writeproc("/proc/rt3052/mii/ctrl", "write 1 0 0x3300");
	writeproc("/proc/rt3052/mii/ctrl", "write 2 0 0x3300");
	writeproc("/proc/rt3052/mii/ctrl", "write 3 0 0x3300");
#endif
#if defined(HAVE_RT10N) || defined(HAVE_F5D8235) || defined(HAVE_RT15N) || defined(HAVE_WCRGN) && !defined(HAVE_HAMEA15)
	FILE *in = fopen("/dev/mtdblock/2", "rb");
	unsigned char mac[32];
	if (in != NULL) {
		fseek(in, 4, SEEK_SET);
		fread(mac, 6, 1, in);
		fclose(in);
		unsigned int copy[6];
		int i;
		for (i = 0; i < 6; i++)
			copy[i] = mac[i] & 0xff;
		sprintf(mac, "%02x:%02x:%02x:%02x:%02x:%02x", copy[0], copy[1], copy[2], copy[3], copy[4], copy[5]);
		if (!strcmp(mac, "ff:ff:ff:ff:ff:ff"))
			eval("ifconfig", "eth2", "hw", "ether", "00:11:22:33:44:55");
		else
			eval("ifconfig", "eth2", "hw", "ether", mac);
	}
#endif
#ifdef HAVE_HAMEA15
	FILE *in = fopen("/dev/mtdblock/1", "rb");
	if (in != NULL) {
		unsigned char *config = malloc(65536);
		memset(config, 0, 65536);
		fread(config, 65536, 1, in);
		int len = strlen("WAN_MAC_ADDR=");
		int i;
		for (i = 0; i < 65535 - (len + 18); i++) {
			if (!strncmp(&config[i], "WAN_MAC_ADDR=", len)) {
				char *mac = &config[i + len];
				if (mac[0] == '"')
					mac++;
				mac[17] = 0;
				eval("ifconfig", "eth2", "hw", "ether", mac);
				nvram_set("et0macaddr_safe", mac);
				nvram_set("et0macaddr", mac);
				break;
			}
		}
		free(config);
		fclose(in);
	}
#endif
#if (defined(HAVE_DIR600) || defined(HAVE_AR670W) || defined(HAVE_EAP9550) || defined(HAVE_AR690W)) && !defined(HAVE_ALL02310N)

	FILE *in = fopen("/dev/mtdblock/1", "rb");
	if (in != NULL) {
		unsigned char *config = malloc(65536);
		memset(config, 0, 65536);
		fread(config, 65536, 1, in);
#if defined(HAVE_AR670W) || defined(HAVE_AR690W)
		int len = strlen("lanmac=");
#else
		int len = strlen("ethaddr=");
#endif
		int i;
		for (i = 0; i < 65535 - (18 + len); i++) {
#if defined(HAVE_AR670W) || defined(HAVE_AR690W)
			if (!strncmp(&config[i], "lanmac=", 7))
#else
			if (!strncmp(&config[i], "ethaddr=", 8))
#endif
			{
				char *mac = &config[i + len];
				if (mac[0] == '"')
					mac++;
				mac[17] = 0;
				eval("ifconfig", "eth2", "hw", "ether", mac);
				nvram_set("et0macaddr_safe", mac);
				nvram_set("et0macaddr", mac);
				break;
			}
		}
		free(config);
		fclose(in);
	}
#endif

	/* switch config */
	if (getRouterBrand() != ROUTER_BOARD_ECB9750 && getRouterBrand() != ROUTER_BOARD_TECHNAXX3G)	// lets load
	{
		eval("ifconfig", "eth2", "up");
#ifndef HAVE_EAP9550
		eval("vconfig", "set_name_type", "VLAN_PLUS_VID_NO_PAD");
		eval("vconfig", "add", "eth2", "1");	//LAN 

		eval("vconfig", "add", "eth2", "2");	//WAN
#ifdef HAVE_RT10N
		MAC_ADD(mac);
		eval("ifconfig", "vlan2", "hw", "ether", mac);
#endif
#endif

#if defined(HAVE_ALLNET11N) || defined(HAVE_ESR6650) || defined(HAVE_WR5422) || defined(HAVE_RT10N) || \
    defined(HAVE_ACXNR22) || defined(HAVE_W502U) || defined(HAVE_ESR9752) || defined(HAVE_ALL02310N)
		sysprintf("switch reg w 14 405555");
		sysprintf("switch reg w 50 2001");
		sysprintf("switch reg w 90 7f7f");
		sysprintf("switch reg w 98 7f3f");
		sysprintf("switch reg w e4 3f");
		sysprintf("switch reg w 40 1002");
		sysprintf("switch reg w 44 1001");
		sysprintf("switch reg w 48 1001");
		sysprintf("switch reg w 70 ffff417e");
#ifdef HAVE_ESR9752
		sysprintf("switch reg w c8 3f502b28");
#endif
#elif HAVE_AR670W
		sysprintf("mii_mgr -s -p 29 -r 23 -v 0x07c2");
		sysprintf("mii_mgr -s -p 29 -r 22 -v 0x8420");

		sysprintf("mii_mgr -s -p 29 -r 24 -v 0x1");
		sysprintf("mii_mgr -s -p 29 -r 25 -v 0x1");
		sysprintf("mii_mgr -s -p 29 -r 26 -v 0x1");
		sysprintf("mii_mgr -s -p 29 -r 27 -v 0x1");
		sysprintf("mii_mgr -s -p 29 -r 28 -v 0x2");
		sysprintf("mii_mgr -s -p 30 -r 9 -v 0x1089");
		sysprintf("mii_mgr -s -p 30 -r 1 -v 0x2f00");
		sysprintf("mii_mgr -s -p 30 -r 2 -v 0x0030");
#elif HAVE_AR690W
#elif HAVE_RT15N
#elif HAVE_BR6574N
#elif HAVE_F5D8235
		sysprintf("switch reg w 14 405555");
		sysprintf("switch reg w 50 2001");
		sysprintf("switch reg w 90 7f7f");
		sysprintf("switch reg w 98 7f40");
		sysprintf("switch reg w e4 20");
		sysprintf("switch reg w 40 1001");
		sysprintf("switch reg w 44 1001");
		sysprintf("switch reg w 48 1001");
		sysprintf("switch reg w 4c 1");
		sysprintf("switch reg w 70 ffffffff");
#elif HAVE_EAP9550
		sysprintf("switch reg w 14 5555");
		sysprintf("switch reg w 40 1001");
		sysprintf("switch reg w 44 1001");
		sysprintf("switch reg w 48 1001");
		sysprintf("switch reg w 4c 1");
		sysprintf("switch reg w 50 2001");
		sysprintf("switch reg w 70 ffffffff");
		sysprintf("switch reg w 90 7f7f");
		sysprintf("switch reg w 98 7f7f");
		sysprintf("switch reg w e4 7f");
#else
		sysprintf("switch reg w 14 405555");
		sysprintf("switch reg w 50 2001");
		sysprintf("switch reg w 90 7f7f");
		sysprintf("switch reg w 98 7f3f");
		sysprintf("switch reg w e4 3f");
		sysprintf("switch reg w 40 1001");
		sysprintf("switch reg w 44 1001");
		sysprintf("switch reg w 48 1002");
		sysprintf("switch reg w 70 ffff506f");
#endif
	}

	struct ifreq ifr;
	int s;

	if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW))) {
		char eabuf[32];

		strncpy(ifr.ifr_name, "eth2", IFNAMSIZ);
		ioctl(s, SIOCGIFHWADDR, &ifr);
		nvram_set("et0macaddr_safe", ether_etoa((unsigned char *)ifr.ifr_hwaddr.sa_data, eabuf));
		close(s);
	}
#endif
	led_control(LED_POWER, LED_ON);
	led_control(LED_SES, LED_OFF);
	led_control(LED_SES2, LED_OFF);
	led_control(LED_DIAG, LED_OFF);
	led_control(LED_BRIDGE, LED_OFF);
	led_control(LED_WLAN0, LED_OFF);
	led_control(LED_WLAN1, LED_OFF);
	led_control(LED_CONNECTED, LED_OFF);
#ifdef HAVE_WCRGN
	set_gpio(0,1);
	set_gpio(10,1);
#endif

	if (!nvram_match("disable_watchdog", "1")) {
		eval("watchdog");
	}
	return;
}
Ejemplo n.º 30
0
void period_check(int sig)
{
	FILE *fp;
	unsigned int val = 0;

#ifdef HAVE_RADIOOFF
	if (initses == 1 && nvram_match("radiooff_boot_off", "1")
	    && nvram_match("radiooff_button", "1")) {
		ses_mode = 1;
		initses = 0;
	}
#endif

	// time_t t;

	// time(&t);
	// DEBUG("resetbutton: now time=%d\n", t);

#if defined(HAVE_MAGICBOX) || defined(HAVE_FONERA) || defined(HAVE_WHRAG108) || defined(HAVE_GATEWORX) || defined(HAVE_STORM) || defined(HAVE_LS2) || defined(HAVE_CA8) || defined(HAVE_TW6600)  || defined(HAVE_LS5) || defined(HAVE_LSX) || defined(HAVE_WP54G) || defined(HAVE_NP28G) || defined(HAVE_SOLO51) || defined(HAVE_OPENRISC) || defined(HAVE_DANUBE) || defined(HAVE_WDR4900) || defined(HAVE_VENTANA)
	val = getbuttonstate();
#ifdef HAVE_WRK54G
	if (val)
		val = 0;
	else
		val = 1;
#endif
#ifndef HAVE_ALPHA
#ifdef HAVE_USR5453
	if (val)
		val = 0;
	else
		val = 1;
#endif
#endif

#else
	if (brand == ROUTER_BOARD_WCRGN) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_WHRG300N) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_HAMEA15) {
		val = get_gpio(0);
	} else if (brand == ROUTER_BOARD_ECB9750) {
		val = get_gpio(11) << 11;
	} else if (brand == ROUTER_BOARD_NEPTUNE) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_RT3352) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_WR5422) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_DIR600B) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_F5D8235) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_ASUS_RTN10PLUS) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_RT15N) {
		val = get_gpio(12) << 12;
	} else if (brand == ROUTER_BOARD_DIR615D) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_ESR6650) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_EAP9550) {
		val = get_gpio(0);
	} else if (brand == ROUTER_BOARD_ESR9752) {
		val = get_gpio(0);
	} else if (brand == ROUTER_BOARD_AR670W) {
		val = get_gpio(9) << 9;
	} else if (brand == ROUTER_BOARD_AR690W) {
		val = get_gpio(9) << 9;
	} else if (brand == ROUTER_BOARD_BR6574N) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_ACXNR22) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_TECHNAXX3G) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_WHR300HP2) {
		val = get_gpio(52) << 1;
	} else if (brand == ROUTER_BOARD_W502U) {
		val = get_gpio(10) << 10;
	} else if (brand == ROUTER_BOARD_GW2380) {
		val = get_gpio(240);
	} else if (brand == ROUTER_BOARD_GW2388) {
		val = get_gpio(240);
	} else {

		if ((fp = fopen(GPIO_FILE, "r"))) {
#ifdef HAVE_XSCALE
			fscanf(fp, "%d", &val);
#else			
			if (brand == ROUTER_NETGEAR_WGR614L)	//gpio 7 power led shared with reset button
			{
				set_gpio(7, 1);	//disable power led
				val = get_gpio(7) << 7;	//read and shift value
				set_gpio(7, 0);	//enable power led
			} else {
				fread(&val, 4, 1, fp);
			}

#endif
			fclose(fp);
		} else
			perror(GPIO_FILE);
	}
#endif
	DEBUG("resetbutton: GPIO = 0x%x\n", val);

	int gpio = 0;

	int state = 0;

#if defined(HAVE_XSCALE) || defined(HAVE_MAGICBOX) || defined(HAVE_FONERA) || defined(HAVE_WHRAG108) || defined(HAVE_GATEWORX) || defined(HAVE_STORM) || defined(HAVE_LS2) || defined(HAVE_CA8) || defined(HAVE_TW6600)  || defined(HAVE_LS5) || defined(HAVE_LSX) || defined(HAVE_WP54G) || defined(HAVE_NP28G) || defined(HAVE_SOLO51) || defined(HAVE_OPENRISC) || defined(HAVE_DANUBE) || defined(HAVE_UNIWIP) || defined(HAVE_VENTANA)
	state = val;
	int sesgpio = 0xfff;
	int wifigpio = 0xfff;
	int push;
	int pushwifi;
#ifdef HAVE_WZRG300NH
	sesgpio = 0x117;
	val |= get_gpio(23) << 23;	//aoss pushbutton
#elif defined(HAVE_WHR300HP2)
	sesgpio = 0x102;
	val |= get_gpio(53) << 2;	//aoss pushbutton
#elif defined(HAVE_NEPTUNE)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_HAMEA15)
//      sesgpio = 0x100;
//      val |= get_gpio(0);     //aoss pushbutton
#elif defined(HAVE_WCRGN)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_RT3352)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_WZRG300NH2)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_WMBR_G300NH)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_WZRG450)
	sesgpio = 0x108;
	val |= get_gpio(8) << 8;	//aoss pushbutton
#elif defined(HAVE_DIR632)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_WZRHPAG300NH)
	sesgpio = 0x105;
	val |= get_gpio(5) << 5;	//aoss pushbutton
#elif defined(HAVE_CARAMBOLA)
	sesgpio = 0xfff;

#elif defined(HAVE_HORNET)
	sesgpio = 0x00b;
	val |= get_gpio(11) << 11;	//aoss pushbutton
#elif defined(HAVE_RB2011)
//      sesgpio = 0x110;
//      val |= get_gpio(16) << 16;      //aoss pushbutton
#elif defined(HAVE_WDR4300)
//      sesgpio = 0x110;
//      val |= get_gpio(16) << 16;      //aoss pushbutton
#elif defined(HAVE_WNDR3700V4)
	sesgpio = 0x10f;
	val |= get_gpio(15) << 15;	//aoss pushbutton
#elif defined(HAVE_DIR825C1)
	sesgpio = 0x110;
	val |= get_gpio(16) << 16;	//aoss pushbutton
#elif defined(HAVE_WASP)
	sesgpio = 0x00b;
	val |= get_gpio(11) << 11;	//aoss pushbutton
#elif defined(HAVE_WNR2200)
//      sesgpio = 0x00b; //not yet supported
//      val |= get_gpio(37) << 37;      //aoss pushbutton
#elif defined(HAVE_WNR2000)
	sesgpio = 0x00b;
	val |= get_gpio(11) << 11;	//aoss pushbutton
#elif defined(HAVE_WDR2543)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_WHRHPGN)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_RT10N)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_RT15N)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_F5D8235)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_WR5422)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_DIR600)
	sesgpio = 0x100;
	val |= get_gpio(0);	//aoss pushbutton
#elif defined(HAVE_DIR615I)
	sesgpio = 0x110;
	val |= get_gpio(16) << 16;	//aoss pushbutton
#elif defined(HAVE_DIR615E)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_WR1043)
	sesgpio = 0x107;
	val |= get_gpio(7) << 7;	//aoss pushbutton
#elif defined(HAVE_WR941)
	sesgpio = 0x107;
	val |= get_gpio(7) << 7;	//aoss pushbutton
#elif defined(HAVE_MR3020)
	sesgpio = 0xfff;
#elif defined(HAVE_WR741V4)
	sesgpio = 0x01a;
	val |= get_gpio(26) << 26;	//aoss pushbutton
#elif defined(HAVE_WR741)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_WRT400)
	sesgpio = 0x103;
	val |= get_gpio(3) << 3;	//aoss pushbutton
#elif defined(HAVE_WNDR3700)
	sesgpio = 0x103;
	val |= get_gpio(3) << 3;	//aoss pushbutton
#elif defined(HAVE_DIR825)
	sesgpio = 0x108;
	val |= get_gpio(8) << 8;	//aoss pushbutton
#elif defined(HAVE_TG2521)
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//aoss pushbutton
#elif defined(HAVE_OPENRISC)
	sesgpio = 0x005;
	val |= get_gpio(5) << 5;	//aoss pushbutton
#endif
#ifdef HAVE_WRT160NL
	sesgpio = 0x107;
	val |= get_gpio(7) << 7;	//wps/ses pushbutton
#endif
#ifdef HAVE_TEW632BRP
	sesgpio = 0x10c;
	val |= get_gpio(12) << 12;	//wps/ses pushbutton
#endif
#else
	if (brand > 0xffff) {
		if ((brand & 0x000ff) != 0x000ff)
			gpio = 1 << (brand & 0x000ff);	// calculate gpio value.

		if ((brand & 0x00100) == 0)	// check reset button polarity: 0
			// normal, 1 inversed
			state = (val & gpio);
		else
			state = !(val & gpio);
	} else {

		if ((brand & 0x000f) != 0x000f)
			gpio = 1 << (brand & 0x000f);	// calculate gpio value.

		if ((brand & 0x0010) == 0)	// check reset button polarity: 0
			// normal, 1 inversed
			state = (val & gpio);
		else
			state = !(val & gpio);
	}
	/* 
	 * 1 byte router's SES (AOSS) button gpio number and polarity; Eko
	 * 25.nov.06
	 * 
	 * R R R P N N N N = 0xXX ----- - ------- | | gpio num | | | |--- SES -
	 * AOSS button polarity (0: normal, 1 inversed) | |-------- reserved for
	 * future use
	 * 
	 * 0xff = button disabled / not available 
	 */
	int push;
	int pushwifi;
	int sesgpio;
	int wifigpio = 0xfff;

	switch (brand) {
	case ROUTER_BUFFALO_WHRG54S:
	case ROUTER_BUFFALO_WZRRSG54:
	case ROUTER_BUFFALO_WLI_TX4_G54HP:
		sesgpio = 0x100;	// gpio 0, inversed
		break;
	case ROUTER_BUFFALO_WLA2G54C:
		sesgpio = 0x102;	// gpio 2, inversed
		break;
	case ROUTER_BUFFALO_WBR2G54S:
		sesgpio = 0x004;	// gpio 4, normal
		break;
	case ROUTER_BUFFALO_WZR600DHP2:
	case ROUTER_BUFFALO_WZR900DHP:
		sesgpio = 0x109;	// gpio 9, inversed
		break;
	case ROUTER_BUFFALO_WZR1750:
		sesgpio = 0x10c;	// gpio 12, inversed
		break;
	case ROUTER_D1800H:
		sesgpio = 0x10a;	// gpio 10, inversed
		break;
#ifndef HAVE_BUFFALO
	case ROUTER_ASUS_WL700GE:
		sesgpio = 0x004;	// gpio 4, normal
		break;
	case ROUTER_ASUS_RTN10PLUSD1:
		sesgpio = 0x114;	// gpio 20, inversed
		break;
	case ROUTER_ASUS_RTN10:
		sesgpio = 0x102;	// gpio 2, inversed
		break;
	case ROUTER_ASUS_RTN12:
	case ROUTER_NETGEAR_WNR2000V2:
		sesgpio = 0x100;	// gpio 0, inversed
		break;
	case ROUTER_LINKSYS_WTR54GS:
	case ROUTER_NETGEAR_WNDR4000:
		sesgpio = 0x102;	// gpio 2, inversed
		break;
	case ROUTER_WRT54G:
	case ROUTER_WRT54G_V8:
	case ROUTER_WRTSL54GS:
	case ROUTER_WRT150N:
	case ROUTER_WRT160N:
	case ROUTER_WRT300N:
	case ROUTER_WRT300NV11:
	case ROUTER_WRT610NV2:
	case ROUTER_ASKEY_RT220XD:	// not soldered
	case ROUTER_DYNEX_DX_NRUTER:
	case ROUTER_LINKSYS_E4200:
	case ROUTER_ASUS_RTN66:
		sesgpio = 0x104;	// gpio 4, inversed
		break;
	case ROUTER_ASUS_AC66U:
		sesgpio = 0x104;	// gpio 4, inversed
		break;
	case ROUTER_DLINK_DIR868:
	case ROUTER_ASUS_AC67U:
		wifigpio = 0x10f;
		sesgpio = 0x107;	// gpio 7, inversed
		break;
	case ROUTER_ASUS_AC56U:
		wifigpio = 0x107;	// gpio 7, inversed
		sesgpio = 0x10f;	// gpio 7, inversed
		break;
	case ROUTER_ASUS_WL500G_PRE:
		sesgpio = 0x004;	// gpio 4, normal
		break;
	case ROUTER_ASUS_WL550GE:
		sesgpio = 0x00f;	// gpio 15, normal
		break;
	case ROUTER_WRT310N:
	case ROUTER_WRT350N:
	case ROUTER_WRT610N:
	case ROUTER_ASUS_RTN16:
	case ROUTER_BELKIN_F7D3301:
	case ROUTER_BELKIN_F7D3302:
	case ROUTER_BELKIN_F7D4301:
	case ROUTER_BELKIN_F7D4302:
	case ROUTER_BELKIN_F5D8235V3:
	case ROUTER_LINKSYS_E3200:
		sesgpio = 0x108;	// gpio 8, inversed
		break;
	case ROUTER_ASUS_WL500W:
		sesgpio = 0x007;	// gpio 7, normal
		break;
	case ROUTER_DLINK_DIR330:
		sesgpio = 0x107;	// gpio 7, inversed
		break;
	case ROUTER_ASUS_WL520GUGC:
	case ROUTER_ASUS_WL500G_PRE_V2:
		sesgpio = 0x103;	// gpio 3, inversed
		break;
	case ROUTER_WAP54G_V3:
		sesgpio = 0x10e;	// gpio 14, inversed
		break;
	case ROUTER_NETGEAR_WNDR3300:
		sesgpio = 0x101;	// gpio 1, inversed
		break;
	case ROUTER_WRT54G_V81:
	case ROUTER_DLINK_DIR320:
	case ROUTER_WRT600N:
	case ROUTER_NETGEAR_WNDR3400:
	case ROUTER_NETGEAR_WNR3500L:
		sesgpio = 0x106;	// gpio 6, inversed
		break;
	case ROUTER_WRT320N:
	case ROUTER_WRT160NV3:
	case ROUTER_NETGEAR_WNDR4500:
	case ROUTER_NETGEAR_WNDR4500V2:
	case ROUTER_NETGEAR_R6300:
		sesgpio = 0x104;
		wifigpio = 0x105;
		break;
	case ROUTER_NETGEAR_R6250:
		sesgpio = 0x104;	
		wifigpio = 0x105;
		break;
	case ROUTER_NETGEAR_R6300V2:
		sesgpio = 0x104;	
		wifigpio = 0x105;
		break;
	case ROUTER_NETGEAR_R7000:
		sesgpio = 0x104;
		wifigpio = 0x105;
		break;
	case ROUTER_WRT310NV2:
		sesgpio = 0x105;	// gpio 5, inversed
		break;
	case ROUTER_LINKSYS_E800:
	case ROUTER_LINKSYS_E900:
	case ROUTER_LINKSYS_E1000V2:
	case ROUTER_LINKSYS_E1500:
	case ROUTER_LINKSYS_E1550:
	case ROUTER_LINKSYS_E2500:
		sesgpio = 0x109;	// gpio 9, inversed
		break;
	case ROUTER_LINKSYS_EA6500:
		sesgpio = 0x104;	// gpio 4, inversed
		break;
#endif
	default:
		sesgpio = 0xfff;	// gpio unknown, disabled
		wifigpio = 0xfff;	// gpio unknown, disabled
	}
#endif

	push = 1 << (sesgpio & 0x0ff);	// calculate push value from ses gpio 
	pushwifi = 1 << (wifigpio & 0x0ff);	// calculate push value from ses gpio 
	// 
	// 
	// 
	// pin no.

	/* 
	 * The value is zero during button-pushed. 
	 */
	if (state && nvram_match("resetbutton_enable", "1")) {
		DEBUG("resetbutton: mode=%d, count=%d\n", mode, count);

		if (mode == 0) {
			/* 
			 * We detect button pushed first time 
			 */
			alarmtimer(0, URGENT_INTERVAL);
			mode = 1;
		}
		{		/* Whenever it is pushed steady */
			if (++count > RESET_WAIT_COUNT) {
				if (check_action() != ACT_IDLE) {	// Don't execute during upgrading
					fprintf(stderr, "resetbutton: nothing to do...\n");
					alarmtimer(0, 0);	/* Stop the timer alarm */
					return;
				}
				if ((brand & 0x000f) != 0x000f) {
					printf("resetbutton: factory default.\n");
					dd_syslog(LOG_DEBUG, "Reset button: restoring factory defaults now!\n");
#if !defined(HAVE_XSCALE) && !defined(HAVE_MAGICBOX) && !defined(HAVE_FONERA) && !defined(HAVE_WHRAG108) && !defined(HAVE_GATEWORX) && !defined(HAVE_LS2) && !defined(HAVE_CA8) && !defined(HAVE_TW6600) && !defined(HAVE_LS5) && !defined(HAVE_LSX) && !defined(HAVE_SOLO51)
					led_control(LED_DIAG, LED_ON);
#elif defined(HAVE_WHRHPGN)  || defined(HAVE_WZRG300NH) || defined(HAVE_WZRHPAG300NH) || defined(HAVE_WZRG450)
					led_control(LED_DIAG, LED_ON);
#endif
					ACTION("ACT_HW_RESTORE");
					alarmtimer(0, 0);	/* Stop the timer alarm */
#ifdef HAVE_X86
					eval("mount", "/usr/local", "-o", "remount,rw");
					eval("rm", "-f", "/tmp/nvram/*");	// delete nvram
					// database
					eval("rm", "-f", "/tmp/nvram/.lock");	// delete
					// nvram
					// database
					eval("rm", "-f", "/usr/local/nvram/*");	// delete
					// nvram
					// database
					eval("mount", "/usr/local", "-o", "remount,ro");
#elif HAVE_RB500
					eval("rm", "-f", "/tmp/nvram/*");	// delete nvram
					// database
					eval("rm", "-f", "/tmp/nvram/.lock");	// delete
					// nvram
					// database
					eval("rm", "-f", "/etc/nvram/*");	// delete nvram
					// database
#elif HAVE_MAGICBOX
					eval("rm", "-f", "/tmp/nvram/*");	// delete nvram
					// database
					eval("rm", "-f", "/tmp/nvram/.lock");	// delete
					// nvram
					// database
					eval("erase", "nvram");
#else
#ifdef HAVE_BUFFALO_SA
					int region_sa = 0;
					if (nvram_default_match("region", "SA", ""))
						region_sa = 1;
#endif
					nvram_set("sv_restore_defaults", "1");
					nvram_commit();
					eval("killall", "ledtool");	// stop blinking on
					// nvram_commit
#if !defined(HAVE_XSCALE) && !defined(HAVE_MAGICBOX) && !defined(HAVE_FONERA) && !defined(HAVE_WHRAG108) && !defined(HAVE_GATEWORX) && !defined(HAVE_LS2) && !defined(HAVE_CA8) && !defined(HAVE_TW6600) && !defined(HAVE_LS5) && !defined(HAVE_LSX) && !defined(HAVE_SOLO51)
					led_control(LED_DIAG, LED_ON);	// turn diag led on,
					// so we know reset
					// was pressed and
					// we're restoring
					// defaults.
#elif defined(HAVE_WHRHPGN) || defined(HAVE_WZRG300NH) || defined(HAVE_WZRHPAG300NH) || defined(HAVE_WZRG450)
					led_control(LED_DIAG, LED_ON);
#endif
#ifdef HAVE_BUFFALO_SA
					nvram_set("sv_restore_defaults", "1");
					if (region_sa)
						nvram_set("region", "SA");
					nvram_commit();
#endif
#endif

					// nvram_set ("sv_restore_defaults", "1");
					// nvram_commit ();

					kill(1, SIGTERM);
				}
			}
		}
	} else if ((sesgpio != 0xfff)
		   && (((sesgpio & 0x100) == 0 && (val & push))
		       || ((sesgpio & 0x100) == 0x100 && !(val & push)))) {
		runStartup("/etc/config", ".sesbutton");
		runStartup("/jffs/etc/config", ".sesbutton");	// if available
		runStartup("/mmc/etc/config", ".sesbutton");	// if available
		runStartup("/tmp/etc/config", ".sesbutton");	// if available
		if (nvram_match("radiooff_button", "1")) {
			led_control(LED_SES, LED_FLASH);	// when pressed, blink white
			switch (ses_mode) {

			case 1:
				// SES (AOSS) led
#ifdef HAVE_RADIOOFF
#ifndef HAVE_BUFFALO
				dd_syslog(LOG_DEBUG, "SES / AOSS / EZ-setup button: turning radio(s) on\n");
#else
				dd_syslog(LOG_DEBUG, "AOSS button: turning radio(s) on\n");
#endif
#ifndef HAVE_ERC
				sysprintf("startservice radio_on");
#endif
#endif

				ses_mode = 0;
				break;
			case 2:

				// (AOSS) led
#ifdef HAVE_RADIOOFF
#ifndef HAVE_BUFFALO
				dd_syslog(LOG_DEBUG, "SES / AOSS / EZ-setup button: turning radio(s) off\n");
#else
				dd_syslog(LOG_DEBUG, "AOSS button: turning radio(s) off\n");
#endif
#ifndef HAVE_ERC
				sysprintf("startservice radio_off");
#endif
#endif

				ses_mode = 1;
				break;
			}

		}
#ifdef HAVE_AOSS
		else if (nvram_match("radiooff_button", "2")) {
			sysprintf("startservice aoss");
		}
#else
#endif

	} else if ((wifigpio != 0xfff)
		   && (((wifigpio & 0x100) == 0 && (val & pushwifi))
		       || ((wifigpio & 0x100) == 0x100 && !(val & pushwifi)))) {
		led_control(LED_WLAN, LED_FLASH);	// when pressed, blink white
		switch (wifi_mode) {
		case 1:
			dd_syslog(LOG_DEBUG, "Wifi button: turning radio(s) on\n");
			sysprintf("startservice radio_on");
			wifi_mode = 0;
			break;
		case 0:
			// (AOSS) led
			dd_syslog(LOG_DEBUG, "Wifi button: turning radio(s) off\n");
			sysprintf("startservice radio_off");
			wifi_mode = 1;
			break;
		}

	} else {

		/* 
		 * Although it's unpushed now, it had ever been pushed 
		 */
		if (mode == 1) {
			if (check_action() != ACT_IDLE) {	// Don't execute during upgrading
				fprintf(stderr, "resetbutton: nothing to do...\n");
				alarmtimer(0, 0);	/* Stop the timer alarm */
				return;
			}
			service_restart();
		}
	}
}