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;
}
Пример #2
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;
		}
	}
}
Пример #3
0
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;
}
Пример #4
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

}
Пример #5
0
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();
	}			
}			
Пример #6
0
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) 
Пример #7
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

}