int do_tftpd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { gpio_init(); if(DETECT()) { 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(check_image(0)) { printf(" \nEnter Recuse Mode for image error\n"); printf(" \n3: System Boot system code via TFTP.\n"); if (NetLoop(TFTPD) < 0) return 1; } /* show LED POWER after success image integrity check */ LEDON(); printf(" \n3: System Boot system code via Flash.\n"); do_bootm(cmdtp, 0, argc, argv); } return 0; }
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; } } }
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 }
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)
int sendLEDData(unsigned int adcResult) { SSP2CON1 = 0; SSP2CON2 = 0; SSP2STAT = 0; TRISDbits.RD6 = 1; //Enable SCL for output TRISDbits.RD5 = 1; //Enable SDA for output TRISDbits.RD3 = 0; //Enable OE SSP2CON1bits.SSPEN = 1; //Master Synchronous Serial Port Enable SSP2CON1bits.SSPM3 = 1; //Master Mode SSP2ADD = 0x63; //PIE3bits.SSP2IE = 1; //MSSP2 Interrupt Enable bit SSP2STATbits.SMP = 1; OE = 0; Delay10TCYx(0); OE = 0; //Restart Command openI2CLED(0x03); sendDataLED(0xa5); sendDataLED(0x5a); //Close and Open I2C with LCD address closeI2CLED(); Delay10TCYx(0); openI2CLED(LCDADDR); //Control Register - Mode 1 controlRegister(MODE1); //00000000 - Normal mode of operation sendDataLED(0x0F); //enable subaddress and all call routines openI2CLED(LCDADDR); //Control Register - Mode 1 controlRegister(MODE2); //00000000 - Normal mode of operation sendDataLED(0x28); openI2CLED(LCDADDR); //Control Register - setup all LED's outputs for individual PWM control controlRegister(LEDOUT0); sendDataLED(0xFF); openI2CLED(LCDADDR); //Control Register controlRegister(LEDOUT1); sendDataLED(0xFF); openI2CLED(LCDADDR); //Control Register controlRegister(LEDOUT2); sendDataLED(0xFF); openI2CLED(LCDADDR); //Control Register controlRegister(LEDOUT3); sendDataLED(0xFF); openI2CLED(LCDADDR); //Control Register controlRegister(LEDOUT4); sendDataLED(0xFF); openI2CLED(LCDADDR); //Control Register controlRegister(LEDOUT5); sendDataLED(0xFF); //TURN ON LED LEDON(0x03, 0x00, 0x10); //TURN ON LED LEDON(0x07, 0x00, 0x08); openI2CLED(LCDADDR); //Control Register controlRegister(GRPPWM); if (adcResult > 0x10) { sendDataLED(0xFA); } else { sendDataLED(0xFA); } openI2CLED(LCDADDR); //Control Register controlRegister(GRPFREQ); if (adcResult > 0x10) { sendDataLED(0x06); } else { sendDataLED(0x40); } /* while(1) { //LED1 ON LEDON(0x03, 0x00, 0xff); for(y=0;y<40;y++) { Delay10TCYx(0); } //LED1 OFF LEDON(0x03, 0x00, 0x00); for(y=0;y<40;y++) { Delay10TCYx(0); } }*/ //Control Register - Group Duty Cycle //controlRegister(0x1A); //10000000 - Group blinking //sendDataLED(0xAA); //Control Register - Group Frequency //controlRegister(0x1B); //10000000 - Group period //sendDataLED(0xAA); //Control Register - Chase control //controlRegister(0x1C); //00001100 - LED1 output enabled //sendDataLED(0x8F); //Control Register - LED Driver output state //controlRegister(0x1D); //00001100 - LED1 output enabled //sendDataLED(0x55); closeI2CLED(); //Interrupt generated once stop condition is complete }