Exemplo n.º 1
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;
}
Exemplo n.º 2
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

}
Exemplo n.º 3
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;
		}
	}
}
Exemplo n.º 4
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();
	}			
}			
Exemplo n.º 5
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)