int do_tftpd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { const int press_times = 1; int i = 0; asus_gpio_init(); if (DETECT()) /* Reset button */ { printf(" \n## Enter Rescue Mode ##\n"); printf(" \n3: System Boot system code via TFTP.\n"); setenv("autostart", "no"); /* Wait forever for an image */ if (NetLoop(TFTPD) < 0) return 1; } else if (DETECT_WPS()) /* WPS button */ { /* Make sure WPS button is pressed at least press_times * 0.01s. */ while (DETECT_WPS() && i++ < press_times) { udelay(10000); } if (i >= press_times) { while (DETECT_WPS()) { udelay(90000); i++; if (i & 1) LEDON(); else LEDOFF(); } LEDOFF(); asus_gpio_uninit(); reset_to_default(); do_reset (NULL, 0, 0, NULL); } } else { if(check_trx(argc, argv)) { printf(" \nEnter Recuse Mode for trx error\n"); printf(" \n3: System Boot system code via TFTP.\n"); if (NetLoop(TFTPD) < 0) return 1; } printf(" \n3: System Boot system code via Flash.\n"); do_bootm(cmdtp, 0, argc, argv); } return 0; }
// Álltalános inicializálórutin static inline void prtinit(void) { // Alap init MCUCR = _BV(JTD); // PUD=0 (felhúzó ellenállások) engedélyezve) MCUCR = _BV(JTD); // JTAG tiltva (tiltható FUSE-ból is, de semmiképpen nem kell.) PRR0 = _BV(PRTWI) | _BV(PRTIM1) | _BV(PRSPI); // TWI, TIM1 and SPI power down PRR1 = _BV(PRTIM5) | _BV(PRTIM4) | _BV(PRTIM3) | _BV(PRUSART3); /* szingli LED-ek */ STPLED(RED1); STPLED(GRN1); STPLED(RED2); STPLED(GRN2); STPLED(BLUE); /* Két színû LED-ek az RJ45 csatikon */ STPLED(LA); LBL_DDR |= LBL_MSK; LBH_DDR |= LBH_MSK; /* All off */ LEDOFF(RED1); LEDOFF(GRN1); LEDON(RED2); LEDOFF(GRN2); LEDOFF(BLUE); setBiLeds(0); /* Jumperek */ STPJP(J0); STPJP(J1); STPJP(J2); STPJP(J3); STPJP(J4); STPJP(J5); STPJP(J6); STPJP(SCL); STPJP(SPA); STPJP(SPB); STPJP(SDA); /* Érzékelõ kapcsolók */ STPJP(S1); STPJP(S2); getJumpers(); STPJP(SCK); STPJP(PDI); SETBIT(PDI); // Felhúzóü ellenállás be STPLED(PDO); // Kimenet CLRBIT(PDO); // PDO = L }
static void reset_release_wait(void) { int gpio; uint32 gpiomask; int i=0; if ((gpio = nvram_resetgpio_init ((void *)sih)) < 0) return; /* Reset button is active low */ gpiomask = (uint32)1 << gpio; while (1) { if ((i%100000) < 30000) { LEDON(); } else { LEDOFF(); } i++; if (i==0xffffff) { i = 0; } if (si_gpioin(sih) & gpiomask) { OSL_DELAY(RESET_DEBOUNCE_TIME); if (si_gpioin(sih) & gpiomask) break; } } }
void LEDisplay() { if(++TimeCounter>=100) { TimeCounter=0; if(direction) { PWM_TimeCounter++; if(PWM_TimeCounter>=PWM_TIME_MAX) { PWM_TimeCounter=PWM_TIME_MAX; direction=0; } } else { PWM_TimeCounter--; if(PWM_TimeCounter<=0) { PWM_TimeCounter=0; direction=1; } } LED_TimeCounter=PWM_TimeCounter; } if(LED_TimeCounter>0) { LEDON(); LED_TimeCounter--; } else { LEDOFF(); } }
static void TftpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len) { ushort proto; int i; static int ledcount=0,ledstate=1; if (dest != TftpOurPort) { return; } /* don't care the packets that donot send to TFTP port */ if (TftpState != STATE_RRQ && src != TftpServerPort) { return; } if (len < 2) { return; } #if 0 if (0==ledcount%64)/*the led flicker when packet received*/ { ledstate+=1; ledstate%=2; } if(0==ledstate%2) LEDON(11); else LEDOFF(11); ++ledcount; if (0xffffff==i) i=0; #endif len -= 2; /* warning: don't use increment (++) in ntohs() macros!! */ proto = *((ushort *)pkt)++; switch (ntohs(proto)) { case TFTP_RRQ: printf("\n Get read request from:("); print_IPaddr(TempServerIP); printf(")\n"); NetCopyIP(&NetServerIP,&TempServerIP); TftpServerPort = src; TftpBlock = 1; TftpBlockWrapOffset = 0; TftpState = STATE_RRQ; for (i=0; i<13; i++) { if (*((uint8_t *)pkt)++ != asuslink[i]) break; } if (i==13) { /* it's the firmware transmitting situation */ /* here get the IP address from the first packet. */ NetOurIP = (*((uint8_t *)pkt)++) & 0x000000ff; NetOurIP<<=8; NetOurIP|= (*((uint8_t *)pkt)++) & 0x000000ff; NetOurIP<<=8; NetOurIP|= (*((uint8_t *)pkt)++) & 0x000000ff; NetOurIP<<=8; NetOurIP|= (*((uint8_t *)pkt)++) & 0x000000ff; } else { for (i=0; i<13; i++) { if (*((uint8_t *)pkt)++ != maclink[i]) break; } if(i==13) { /* here get the IP address from the first packet. */ NetOurIP = (*((uint8_t *)pkt)++)& 0x000000ff; NetOurIP<<=8; NetOurIP|=(*((uint8_t *)pkt)++)& 0x000000ff; NetOurIP<<=8; NetOurIP|=(*((uint8_t *)pkt)++)& 0x000000ff; NetOurIP<<=8; NetOurIP|=(*((uint8_t *)pkt)++)& 0x000000ff; } } TftpdSend();//send a vacant Data packet as a ACK break; case TFTP_WRQ: TftpServerPort = src; TftpBlock = 0; TftpState = STATE_WRQ; TftpdSend(); break; case TFTP_DATA: if (len < 2) return; len -= 2; TftpBlock = ntohs(*(ushort *)pkt); /* * RFC1350 specifies that the first data packet will * have sequence number 1. If we receive a sequence * number of 0 this means that there was a wrap * around of the (16 bit) counter. */ if (TftpBlock == 0) { printf("\n\t %lu MB reveived\n\t ", TftpBlockWrapOffset>>20); } else { if (((TftpBlock - 1) % 10) == 0)