⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 letext_324.c

📁 Source Code Source Code Source Code Source Code Source Code Source Code Source Code Source Code Sour
💻 C
📖 第 1 页 / 共 2 页
字号:
	{ LED_BG,					LED_BR|LED_R|LED_Y,			100, LD07 },	/**< 07 = master on 1 - st 0 */
	{ LED_BR,					LED_BG|LED_R|LED_Y,			100, LD08 },	/**< 08 = master on 2 - st 0 */
	// error to read card or pin incorrect - use lm_ti=4 and lm_ol
	{ LED_BR,					LED_BG|LED_R|LED_Y,			 10, LD10 },	/**< 09 = card unknown 1 */
	{ 0,						LED_BR|LED_BG|LED_R|LED_Y,	 10, LD09 },	/**< 10 = card unknown 2 */
	// master card recognized - use lm_ti=6 and lm_ol
	{ LED_BG|LED_R,				LED_BR|LED_Y,				 10, LD12 },	/**< 11 = card master received 1 */
	{ 0,						LED_BR|LED_BG|LED_R|LED_Y,	 10, LD11 },	/**< 12 = card master received 2 */
	// programming the card and return - use lm_ti=4 and lm_ol=lm_st
	{ LED_BG,					LED_R|LED_BR|LED_Y,			 15, LD14 },	/**< 13 = blink green led 1 */
	{ 0,						LED_BR|LED_BG|LED_R|LED_Y,	 15, LD13 },	/**< 14 = blink green led 2 */
	{ LED_BG|LED_R,				LED_BR|LED_Y,				100, LD15 },	/**< 15 = master on 1 - st 1 */
	{ LED_BG|LED_Y,				LED_BR|LED_R,				100, LD16 },	/**< 16 = master on 1 - st 2 */
	{ LED_BG|LED_R|LED_Y,		LED_BR,						100, LD17 },	/**< 17 = master on 1 - st 3 */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 50, LD21 },	/**< 18 = master on 1 - st 4 toggle */
	{ LED_BR|LED_R,				LED_Y|LED_BG,				100, LD19 },	/**< 19 = master on 2 - st 1 */
	{ LED_BR|LED_Y,				LED_R|LED_BG,				100, LD20 },	/**< 20 = master on 2 - st 2 */
	// toggle di LD18
	{ LED_BG|LED_R,				LED_BR|LED_Y,				 50, LD18 },	/**< 21 = master on 1 - st 4 toggle */
	// accesso a servizi - due lampeggi verdi
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	170, LD23 },	/**< 22 = off accesso servizi */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD24 },	/**< 23 = on  accesso servizi */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD25 },	/**< 24 = off accesso servizi */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD22 },	/**< 25 = on  accesso servizi */
	// accesso aree comuni - tre lampeggi verdi
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	150, LD27 },	/**< 26 = off accesso aree comuni */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD28 },	/**< 27 = on  accesso aree comuni */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD29 },	/**< 28 = off accesso aree comuni */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD30 },	/**< 29 = on  accesso aree comuni */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD31 },	/**< 30 = off accesso aree comuni */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD26 },	/**< 31 = on  accesso aree comuni */
	// accesso aree a scalare - quattro lampeggi verdi
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	130, LD33 },	/**< 32 = off accesso aree a scalare */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD34 },	/**< 33 = on  accesso aree a scalare */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD35 },	/**< 34 = off accesso aree a scalare */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD36 },	/**< 35 = on  accesso aree a scalare */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD37 },	/**< 36 = off accesso aree a scalare */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD38 },	/**< 37 = on  accesso aree a scalare */
	{ 0,						LED_BG|LED_BR|LED_R|LED_Y,	 10, LD39 },	/**< 38 = off accesso aree a scalare */
	{ LED_BG,					LED_BR|LED_R|LED_Y,			 10, LD32 },	/**< 39 = on  accesso aree a scalare */
	// master on - setup accessi.
	{ LED_BR|LED_BG,			LED_Y|LED_R,				100, LD40 },	/**< 40 = master on 3 - st 0 */
	{ LED_BR|LED_BG|LED_R,		LED_Y,						100, LD41 },	/**< 41 = master on 3 - st 1 */
	{ LED_BR|LED_BG|LED_Y,		LED_R,						100, LD42 },	/**< 42 = master on 3 - st 2 */
	{ LED_BR|LED_BG|LED_R|LED_Y,0,							100, LD43 }		/**< 43 = master on 3 - st 3 */
};

/* +-------------------------------------------------------------------+ */
/* |             I N T E R R U P T   F U N C T I O N S                 | */
/* +-------------------------------------------------------------------+ */

/* +-------------------------------------------------------------------+ */
/* | I S R ( U S A R T 0 _R X _ v e c t )               15 Aprile 2008 | */
/* | Funzione in interrupt per la ricezione di un byte dall'USART 0.   | */
/* +-------------------------------------------------------------------+ */
ISR( USART0_RX_vect )
{
char c = UDR0;

	tmrRXinProgress = 2;
	if( UCSR0A & _BV( FE0 ) )	// check UART zero error
		asm volatile ("nop\n\t");
	else
	{
		if( UCSR0A & _BV( DOR0 ) )
			pcRxBuf[pc0Wr] = 0xFF;
		else
			pcRxBuf[pc0Wr] = c; // write character to the buffer
		if( tbuz == 0 )
			TCNT2 = 0;	// restart timer time
		pc0Wr++;
		pc0Wr &= MASKBUF;
	}
}

/* +-------------------------------------------------------------------+ */
/* | I S R ( T I M E R 0 _ C O M P A _ v e c t )        15 Aprile 2008 | */
/* | Funzione in interrupt richiamata ogni 10ms (system tick)          | */
/* +-------------------------------------------------------------------+ */
ISR( TIMER0_COMPA_vect )
{
	tout++;
	tdel--;
	if( tled )
		tled--;
	if( tmrRXinProgress )
		tmrRXinProgress--;
	if( clima_on )
	{
		if( !( --clima_on ) )
			PORTA &= ~OUT_ELETT;
	}
	if( luci_on )
	{
		if( !( --luci_on ) )
			luci_OFF( );
	}
	if( t200 )
	{
		t200--;
		if( t200 == 19 )
			cardMode |= 0x01;
		else if( t200 == 15 )
			cardMode |= 0x02;
		if( t200 == 13 )
			cardMode |= 0x04;
		if( t200 == 0 )
		{
			cardMode &= ~0x07;
			if( !t_doorbell_F )
			{
				if( !( --t_doorbell ) )
				{
					PORTA &= ~OUT_RING;
					t_doorbell = (uint16_t)eeprom_read_byte( &EEToutDoorB ) * 5;
					t_doorbell_F = 1;
				}
			}
			if( tmrLetInt )
			{
				if( !( --tmrLetInt ) )
					B_LetinOK = 0;
			}
			if( tmrTermo )
			{
				if( !( --tmrTermo ) )
					B_TermoOK = 0;
			}
		}
	}
	tmain++;
	if( tbuz )
	{
		if( !(--tbuz ) )
			_STOPTIMER2;
	}
}

/* +-------------------------------------------------------------------+ */
/* | I S R ( T I M E R 2 _ C O M P A _ v e c t )        15 Aprile 2008 | */
/* | Funzione in interrupt richiamata allo scadere del timeout (circa  | */
/* | 4chrs - 777us @56K) della seriale - fine messaggio RS-485         | */
/* +-------------------------------------------------------------------+ */
ISR( TIMER2_COMPA_vect )
{
	T2OVFV = 1;
	_STOPTIMER2;
}

/* +-------------------------------------------------------------------+ */
/* | I S R ( T I M E R 2 _ C O M P B _ v e c t )        15 Aprile 2008 | */
/* | Funzione in interrupt richiamata allo scadere del timeout (circa  | */
/* | 111us) per commutare l'uscita del buzzer - generazione tono       | */
/* +-------------------------------------------------------------------+ */
ISR( TIMER2_COMPB_vect )
{
	TCNT2 = 0;			// restart timer time
	PORTC ^= BUZZE;	 	// toggle BUZZER output
}

/* +-------------------------------------------------------------------+ */
/* |                       F U N C T I O N S                           | */
/* +-------------------------------------------------------------------+ */

/* +-------------------------------------------------------------------+ */
/* | c a r d I s N o t O K (  )                         15 Aprile 2008 | */
/* | Funzione ausiliaria per settare le varibili nel caso in cui venga | */
/* | letta una carta transponder non valida o che si siano verificati  | */
/* | degli errori in fase di lettura/scrittuta.                        | */
/* | Parametri passati   : Nessuno                                     | */
/* | Parametri ritornati : Nessuno                                     | */
/* +-------------------------------------------------------------------+ */
void cardIsNotOK( void )
{
	next_led_st( LD09, 4, lm_st );
	buz_cnt = 3;
	card_is = RF_WAIT;
	Stat.cardUNK = 1;
}

/* +-------------------------------------------------------------------+ */
/* | c a r d I s O K (  )                               15 Aprile 2008 | */
/* | Funzione ausiliaria per settare le varibili nel caso in cui venga | */
/* | letta una carta transponder valida (abilitata).                   | */
/* | Parametri passati   : flag che indica se applicare il reset carta | */
/* | Parametri ritornati : Nessuno                                     | */
/* +-------------------------------------------------------------------+ */
void cardIsOK( uint8_t setType )
{
	if( setType )
		card_is = RF_OKCK;
	fOpened = 1;
	oCard = card_is;
	localOpenLck = 1;
	onSerratura( );
	if( !( PINB & LED_Y ) )
		luci_ON( 1 );
	next_led_st( LD05, 0, 0 );
	buz_cnt = 1;
}

/* +-------------------------------------------------------------------+ */
/* | t r y A c c e s s B y Z o n e (  )                 15 Aprile 2008 | */
/* | Funzione ausiliaria per controllare l'accesso indiretto alla zona | */
/* | definita nella EEPROM del lettore con la bitmap della carta.      | */
/* | La validazione indiretta avviene leggendo la Word#13              | */
/* | Parametri passati   : Nessuno                                     | */
/* | Parametri ritornati : 0: Accesso valido                           | */
/* +-------------------------------------------------------------------+ */
uint8_t	tryAccessByZone( void )
{
uint32_t card_13;
uint8_t retry = 0;

	if( !( lo_subci & card_subci ) )
	{
		cardIsNotOK( );
		return ( 1 );
	}
	do {
		if( !read_4550( &card_13, 13 ) )
			retry = 20;
	} while( retry++ < 10 );
	if( retry == 10 )
	{
		cardIsNotOK( );
		return ( 1 );
	}
	if( checkZone( &card_13 ) ) // zona stanze #13.01 se si carta valida
	{
		if( checkRefZone( &card_13 ) ) // zona riferimento #13.23 se non coincide carta non valida
		{
			cardIsNotOK( );
			return ( 1 );
		}
		if( checkBitmapStanze( ) ) // bmp stanze #14-#17 solo se zona riferimento OK
		{
			cardIsNotOK( );
			return ( 1 );
		}
	}
	// se va tutto bene devi attivare elettroserratura e passare in carta OK
	if( card_type == CIS_CAMERIR )
		card_is = RF_CAMERIERA;
	else
		card_is = RF_OKCK;
	cardIsOK( 0 );
	return ( 0 );	// OK
}

/* +-------------------------------------------------------------------+ */
/* | r e a d I n p u t (  )                             15 Aprile 2008 | */
/* | Funzione ausiliaria per la lettura e l'aggiornamento dello stato  | */
/* | degli ingressi del lettore (i due ausiliari pi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -