📄 rw_data.c
字号:
/* +-------------------------------------------------------------------+ */
/* | Project : 1920.011 442GA01-M (Ext. Reader RFID 13,56MHz MIFARE) | */
/* | Module : RW_data.c | */
/* | Author : Jaime Rodriguez | */
/* | Company : AVE S.p.A. | */
/* | Released: October, 29 2008 | */
/* | Revision: YZ080.00 (FW - First Official Release) | */
/* | Revision: YZ081.00 (EEPROM - First Official Release) | */
/* | Revised : -------------- | */
/* | Revisor : -------------- | */
/* | Notes : -------------- | */
/* +-------------------------------------------------------------------+ */
/* | Purpose : This module contains functions to read and to write all | */
/* | the local variables (Flash, EEPROM or RAM) | */
/* +-------------------------------------------------------------------+ */
/* | Functions: uint8_t getLocalData( uint8_t loc, uint8_t* s ) | */
/* | void setLocalData( uint8_t loc, uint8_t* s ) | */
/* +-------------------------------------------------------------------+ */
/* +-------------------------------------------------------------------+ */
/* | I N C L U D E S | */
/* +-------------------------------------------------------------------+ */
// G L O B A L
#include <avr/io.h>
#include <avr/pgmspace.h>
// L O C A L S
#include "LetExtDef.h"
/* +-------------------------------------------------------------------+ */
/* | D E F I N E S | */
/* +-------------------------------------------------------------------+ */
#define L1 0x10 // 8 bit item
#define L2 0x20 // 16 bit item
#define L4 0x40 // 32 bit item
#define OR 0x01 // not writable item
#define RW 0x02 // writable item
#define ROM_ITEMS 2 // number of ROM items
#define RAM_ITEMS 11 // number of RAM items
#define RAM_EEP_ITEMS 18 // number of EEPROM items
#define FIRST_EE_ITEM_IDX ( ROM_ITEMS + RAM_ITEMS )
#define ITEMS ( ROM_ITEMS + RAM_ITEMS + RAM_EEP_ITEMS ) // total number of items
/* +-------------------------------------------------------------------+ */
/* | S T R U C T U R E S | */
/* +-------------------------------------------------------------------+ */
typedef struct {
void *add; /* address pointer to variable access */
uint8_t len_wrt; /* byte, word od dword variable type end write or read only definition */
} ItemDescrStruct;
/* +-------------------------------------------------------------------+ */
/* | E X T V A R I A B L E S | */
/* +-------------------------------------------------------------------+ */
// R O M I t e m s
extern prog_uint8_t FWrev; // Software revision
extern prog_uint8_t FWvers; // Hardware revision
// R A M I t e m s
extern volatile uint8_t LI_STATUS;
extern volatile uint8_t card_type;
/*-----------------23/10/2008 16.05-----------------
* VARIABILI DA CANCELLARE
* --------------------------------------------------*/
// E E P R O M
uint16_t EERF_TX0_b EEMEM = 0; /**< periodo di output a 0 */
uint16_t EERF_TX1_b EEMEM = 0; /**< periodo di output a 1 */
// R A M
volatile uint16_t V_RF_TX0_b;
volatile uint16_t V_RF_TX1_b;
/* +-------------------------------------------------------------------+ */
/* | M O D U L E V A R I A B L E S | */
/* +-------------------------------------------------------------------+ */
// *********************************************************************
// Table to access local variables (read and/or write)
//
// Set the structure about ROM_ITEMS, RAM_ITEMS and RAM_EEP_ITEMS
// You must put variables in this sequence:
// 1) ROM items --- 2) RAM items --- 3) EEPROM items
// then update ROM_ITEMS, RAM_ITEMS and RAM_EEP_ITEMS defines
// *********************************************************************
ItemDescrStruct ItemDescr[] PROGMEM = {
// ROM items
{ (void *)&FWrev, L1 | OR }, // #00
{ (void *)&FWvers, L1 | OR }, // #01
// RAM items
{ (void *)&card_type, L1 | OR }, // #02
{ (void *)&LI_STATUS, L1 | OR }, // #03
{ (void *)&time, L4 | RW }, // #04
{ (void *)&V_RF_TX0_b, L2 | RW }, // #05
{ (void *)&V_RF_TX1_b, L2 | RW }, // #06
{ (void *)&RF_code[0], L4 | OR }, // #07
{ (void *)&RF_code[1], L4 | OR }, // #08
{ (void *)&RF_code[2], L4 | OR }, // #09
{ (void *)&RF_code[3], L4 | OR }, // #0a
{ (void *)&RF_code[4], L4 | OR }, // #0b
{ (void *)&RF_code[5], L4 | OR }, // #0c
// EEPROM items
{ (void *)&EEDlyRunTime, L1 | RW }, // #0d
{ (void *)&EECodiceHotel, L2 | RW }, // #0e
{ (void *)&EECodiceCamera, L2 | RW }, // #0f
{ (void *)&EECodiceClient, L2 | RW }, // #10
{ (void *)&EECodiceLivell, L1 | RW }, // #11
{ (void *)&EEEletOffOn, L1 | RW }, // #12
{ (void *)&EERFCardTOut, L1 | RW }, // #13
{ (void *)&EELuciOffOut, L1 | RW }, // #14
{ (void *)&EE_MM_AC, L1 | RW }, // #15
{ (void *)&EE_MM_ACS, L1 | RW }, // #16
{ (void *)&EEMODE_IS, L1 | RW }, // #17
{ (void *)&EEST_CA_LO, L1 | RW }, // #18
{ (void *)&EERF_TX0_b, L2 | RW }, // #19
{ (void *)&EERF_TX1_b, L2 | RW }, // #1a
{ (void *)&EECodiceSubci, L1 | RW }, // #1b
{ (void *)&EEToutDoorB, L1 | RW }, // #1c
{ (void *)&EEAlwaysDoorB, L1 | RW }, // #1d
{ (void *)&EEMyAddress, L1 | RW } // #1e
};
/* +-------------------------------------------------------------------+ */
/* | F U N C T I O N S | */
/* +-------------------------------------------------------------------+ */
/* +-------------------------------------------------------------------+ */
/* | g e t L o c a l D a t a ( ) 15 Aprile 2008 | */
/* | Funzione per la lettura di una variabile di configurazione dalla | */
/* | memoria del microcontrollore (FLASH, EEPROM o RAM) | */
/* | Parametri passati : Indice, parametro in cui memorizzare dato | */
/* | Parametri ritornati : dimensione della variabile letta | */
/* +-------------------------------------------------------------------+ */
uint8_t getLocalData( uint8_t loc, uint8_t* s )
{
uint8_t item_len, i;
uint8_t* item_add;
if( loc > ( ITEMS + 1 ) )
return ( 1 );
item_len = ( pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) >> 4 );
item_add = (uint8_t *)pgm_read_word_near( &( ItemDescr[loc].add ) );
if( loc < ROM_ITEMS ) // data stored in FLASH memory
{
for( i = 0; i < item_len; i++ )
*s++ = pgm_read_byte_near( item_add + i );
}
else if( loc >= FIRST_EE_ITEM_IDX ) // data stored in EEPROM memory
{
for( i = 0; i < item_len; i++ )
*s++ = eeprom_read_byte( ( item_add ) + i );
}
else // data stored in RAM memory
{
for( i = 0; i < item_len; i++ )
*s++= ( *(uint8_t*)( ( item_add ) + i ) );
}
return ( item_len );
}
/* +-------------------------------------------------------------------+ */
/* | s e t L o c a l D a t a ( ) 15 Aprile 2008 | */
/* | Funzione per la scrittura di una variabile di configurazione nella| */
/* | memoria del microcontrollore (EEPROM o RAM) | */
/* | Parametri passati : Indice, parametro in cui memorizzare dato | */
/* | Parametri ritornati : Nessuno | */
/* +-------------------------------------------------------------------+ */
void setLocalData( uint8_t loc, uint8_t* s )
{
uint8_t item_len, item_wr, i;
uint8_t* item_add;
if( loc > ( ITEMS + 1 ) )
return;
item_len = ( pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) >> 4 );
item_add = (uint8_t *)pgm_read_word_near( &( ItemDescr[loc].add ) );
item_wr = pgm_read_byte( &( ItemDescr[loc].len_wrt ) ) & 0x0f;
if( item_wr != RW ) // is parameter writable?
return;
if( loc >= FIRST_EE_ITEM_IDX ) // data stored in EEPROM memory
{
for( i = 0; i < item_len; i++ )
eeprom_write_byte( ( item_add ) + i, *s++ );
}
else // data stored in RAM memory
{
for( i = 0; i < item_len; i++ )
( *(uint8_t*)( ( item_add ) + i ) ) = *s++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -