?? letext_324.c
字號:
{ 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 + -