// 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); } }
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); }
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; }
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); }
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; }
int setFanOff(void) { led_control(FAN, FAN_OFF); if( !button_pressed(BTN_FAN) ) puts("1"); else puts("ATE_ERROR"); }
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 }
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); }
//***************************************************************************** // 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); }
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--; }
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
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; } }
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); } } }
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&"); // } } }
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"); }
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
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; }
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); } } }
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"); }
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; }
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); }
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"); }
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; }
/*============================================================================== * 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)); } } } }
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"); }
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; }
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; }
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(); } } }