mbed OS 5 example application using X-NUCLEO-NFC02A1

Dependencies:   NDefLib X_NUCLEO_NFC02A1

Fork of HelloWorld_NFC02A1 by ST

Committer:
rosarium
Date:
Wed Jul 27 09:25:33 2016 +0000
Revision:
0:892175366555
Child:
1:11ae12d41082
first release of the complete mbed library for HelloWorld_NFC02A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:892175366555 1 #ifndef __M24LR_H
rosarium 0:892175366555 2 #define __M24LR_H
rosarium 0:892175366555 3
rosarium 0:892175366555 4 #include "common.h"
rosarium 0:892175366555 5 #include "DevI2C.h"
rosarium 0:892175366555 6 //#include "lib_NDEF_URI.h"
rosarium 0:892175366555 7 /* Exported constants --------------------------------------------------------*/
rosarium 0:892175366555 8 /** @defgroup M24LR_Exported_Constants
rosarium 0:892175366555 9 * @{
rosarium 0:892175366555 10 */
rosarium 0:892175366555 11 #define I_AM_M24LR04 0x5A
rosarium 0:892175366555 12 #define I_AM_M24LR16 0x4E
rosarium 0:892175366555 13 #define I_AM_M24LR64 0x5E
rosarium 0:892175366555 14
rosarium 0:892175366555 15 #ifndef NULL
rosarium 0:892175366555 16 #define NULL (void *) 0
rosarium 0:892175366555 17 #endif
rosarium 0:892175366555 18
rosarium 0:892175366555 19 #define M24LR_PAGEWRITE_NBBYTE 4
rosarium 0:892175366555 20
rosarium 0:892175366555 21 #define M24LR_ADDR_DATA_I2C 0xA6
rosarium 0:892175366555 22 #define M24LR_ADDR_SYST_I2C 0xAE
rosarium 0:892175366555 23 #define M24LR_I2C_TIMEOUT 200 /* I2C Time out (ms), this is the maximum time needed by M24LR to complete any command */
rosarium 0:892175366555 24
rosarium 0:892175366555 25 #define M24LR_IT_BUSY_MASK 0x01
rosarium 0:892175366555 26 #define M24LR_IT_WIP_MASK 0x02
rosarium 0:892175366555 27
rosarium 0:892175366555 28 /* Registers address */
rosarium 0:892175366555 29 #define M24LR_SSS_REG 0x0000
rosarium 0:892175366555 30 #define M24LR_LOCK_REG 0x0800
rosarium 0:892175366555 31 #define M24LR_I2C_PWD_REG 0x0900
rosarium 0:892175366555 32 #define M24LR_CFG_REG 0x0910
rosarium 0:892175366555 33 #define M24LR_AFI_REG 0x0912
rosarium 0:892175366555 34 #define M24LR_DSFID_REG 0x0913
rosarium 0:892175366555 35 #define M24LR_UID_REG 0x0914
rosarium 0:892175366555 36 #define M24LR_ICREF_REG 0x091C
rosarium 0:892175366555 37 #define M24LR_MEMSIZE_REG 0x091D
rosarium 0:892175366555 38 #define M24LR_CTRL_REG 0x0920
rosarium 0:892175366555 39
rosarium 0:892175366555 40 /* Registers mask */
rosarium 0:892175366555 41 #define M24LR_SSS_LOCK_MASK 0x01
rosarium 0:892175366555 42 #define M24LR_SSS_RW_MASK 0x06
rosarium 0:892175366555 43 #define M24LR_SSS_PASSCTRL_MASK 0x18
rosarium 0:892175366555 44 #define M24LR_LOCK_MASK 0x0F
rosarium 0:892175366555 45
rosarium 0:892175366555 46 #define M24LR_CFG_EHCFG0_MASK 0x01
rosarium 0:892175366555 47 #define M24LR_CFG_EHCFG1_MASK 0x02
rosarium 0:892175366555 48 #define M24LR_CFG_EHMODE_MASK 0x04
rosarium 0:892175366555 49 #define M24LR_CFG_WIPBUSY_MASK 0x08
rosarium 0:892175366555 50
rosarium 0:892175366555 51 #define M24LR_CTRL_EHEN_MASK 0x01
rosarium 0:892175366555 52 #define M24LR_CTRL_FIELD_MASK 0x02
rosarium 0:892175366555 53 #define M24LR_CTRL_TPROG_MASK 0x80
rosarium 0:892175366555 54
rosarium 0:892175366555 55
rosarium 0:892175366555 56 /**
rosarium 0:892175366555 57 * @brief M24LR VOUT Configuration enumerator definition
rosarium 0:892175366555 58 */
rosarium 0:892175366555 59 typedef enum
rosarium 0:892175366555 60 {
rosarium 0:892175366555 61 M24LR_EH_Cfg_6MA = 0,
rosarium 0:892175366555 62 M24LR_EH_Cfg_3MA,
rosarium 0:892175366555 63 M24LR_EH_Cfg_1MA,
rosarium 0:892175366555 64 M24LR_EH_Cfg_300UA
rosarium 0:892175366555 65 } M24LR_EH_CFG_VOUT;
rosarium 0:892175366555 66
rosarium 0:892175366555 67 /**
rosarium 0:892175366555 68 * @brief M24LR FIELD status enumerator definition
rosarium 0:892175366555 69 */
rosarium 0:892175366555 70 typedef enum
rosarium 0:892175366555 71 {
rosarium 0:892175366555 72 M24LR_FIELD_OFF = 0,
rosarium 0:892175366555 73 M24LR_FIELD_ON
rosarium 0:892175366555 74 } M24LR_FIELD_STATUS;
rosarium 0:892175366555 75
rosarium 0:892175366555 76 /**
rosarium 0:892175366555 77 * @brief M24LR TT-PROG status enumerator definition
rosarium 0:892175366555 78 */
rosarium 0:892175366555 79 typedef enum
rosarium 0:892175366555 80 {
rosarium 0:892175366555 81 M24LR_T_PROG_NO = 0,
rosarium 0:892175366555 82 M24LR_T_PROG_OK
rosarium 0:892175366555 83 } M24LR_T_PROG_STATUS;
rosarium 0:892175366555 84
rosarium 0:892175366555 85 /**
rosarium 0:892175366555 86 * @brief M24LR Energy Harvesting status enumerator definition
rosarium 0:892175366555 87 */
rosarium 0:892175366555 88 typedef enum
rosarium 0:892175366555 89 {
rosarium 0:892175366555 90 M24LR_EH_DISABLE = 0,
rosarium 0:892175366555 91 M24LR_EH_ENABLE
rosarium 0:892175366555 92 } M24LR_EH_STATUS;
rosarium 0:892175366555 93
rosarium 0:892175366555 94 /**
rosarium 0:892175366555 95 * @brief M24LR Energy Harvesting mode enumerator definition
rosarium 0:892175366555 96 */
rosarium 0:892175366555 97 typedef enum
rosarium 0:892175366555 98 {
rosarium 0:892175366555 99 M24LR_EH_MODE_ENABLE = 0,
rosarium 0:892175366555 100 M24LR_EH_MODE_DISABLE
rosarium 0:892175366555 101 } M24LR_EH_MODE_STATUS;
rosarium 0:892175366555 102
rosarium 0:892175366555 103 /**
rosarium 0:892175366555 104 * @brief M24LR GPO status enumerator definition
rosarium 0:892175366555 105 */
rosarium 0:892175366555 106 typedef enum
rosarium 0:892175366555 107 {
rosarium 0:892175366555 108 M24LR_GPO_BUSY = 0,
rosarium 0:892175366555 109 M24LR_GPO_WIP
rosarium 0:892175366555 110 } M24LR_GPO_STATUS;
rosarium 0:892175366555 111
rosarium 0:892175366555 112 /**
rosarium 0:892175366555 113 * @brief M24LR Memory information structure definition
rosarium 0:892175366555 114 */
rosarium 0:892175366555 115 typedef struct
rosarium 0:892175366555 116 {
rosarium 0:892175366555 117 uint8_t BlockSize;
rosarium 0:892175366555 118 uint16_t Mem_Size;
rosarium 0:892175366555 119 } M24LR_Mem_Size;
rosarium 0:892175366555 120
rosarium 0:892175366555 121 /**
rosarium 0:892175366555 122 * @brief M24LR I2C Write Lock register structure definition
rosarium 0:892175366555 123 */
rosarium 0:892175366555 124 typedef struct
rosarium 0:892175366555 125 {
rosarium 0:892175366555 126 uint8_t sectors_7_0;
rosarium 0:892175366555 127 uint8_t sectors_15_8;
rosarium 0:892175366555 128 uint8_t sectors_23_16;
rosarium 0:892175366555 129 uint8_t sectors_31_24;
rosarium 0:892175366555 130 uint8_t sectors_39_32;
rosarium 0:892175366555 131 uint8_t sectors_47_40;
rosarium 0:892175366555 132 uint8_t sectors_55_48;
rosarium 0:892175366555 133 uint8_t sectors_63_56;
rosarium 0:892175366555 134 } M24LR_Lock_Sectors;
rosarium 0:892175366555 135
rosarium 0:892175366555 136 /**
rosarium 0:892175366555 137 * @brief M24LR UID information structure definition
rosarium 0:892175366555 138 */
rosarium 0:892175366555 139 typedef struct
rosarium 0:892175366555 140 {
rosarium 0:892175366555 141 uint32_t MSB_UID;
rosarium 0:892175366555 142 uint32_t LSB_UID;
rosarium 0:892175366555 143 } M24LR_UID;
rosarium 0:892175366555 144
rosarium 0:892175366555 145 /**
rosarium 0:892175366555 146 * @brief M24LR Sector Security register structure definition
rosarium 0:892175366555 147 */
rosarium 0:892175366555 148 typedef struct
rosarium 0:892175366555 149 {
rosarium 0:892175366555 150 uint8_t SectorLock;
rosarium 0:892175366555 151 uint8_t RW_Protection;
rosarium 0:892175366555 152 uint8_t PassCtrl;
rosarium 0:892175366555 153 } M24LR_SECTOR_SEC;
rosarium 0:892175366555 154
rosarium 0:892175366555 155
rosarium 0:892175366555 156 /**
rosarium 0:892175366555 157 * @}
rosarium 0:892175366555 158 */
rosarium 0:892175366555 159
rosarium 0:892175366555 160 class M24LR {
rosarium 0:892175366555 161 public:
rosarium 0:892175366555 162 NFCTAG_StatusTypeDef i2c_Init( void );
rosarium 0:892175366555 163 NFCTAG_StatusTypeDef i2c_ReadID( uint8_t * const pICRef );
rosarium 0:892175366555 164 NFCTAG_StatusTypeDef i2c_IsDeviceReady( const uint32_t Trials );
rosarium 0:892175366555 165 NFCTAG_StatusTypeDef i2c_ConfigureGPO( const uint16_t ITConf );
rosarium 0:892175366555 166 NFCTAG_StatusTypeDef i2c_GetGPOStatus( uint16_t * const pGPOStatus );
rosarium 0:892175366555 167 NFCTAG_StatusTypeDef i2c_ReadData( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 168 NFCTAG_StatusTypeDef i2c_WriteData( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 169 NFCTAG_StatusTypeDef i2c_ReadRegister( uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 170 NFCTAG_StatusTypeDef i2c_WriteRegister( const uint8_t * const pData, const uint16_t TarAddr, const uint16_t NbByte );
rosarium 0:892175366555 171
rosarium 0:892175366555 172
rosarium 0:892175366555 173 /* Extended Functions */
rosarium 0:892175366555 174 NFCTAG_StatusTypeDef i2c_ReadUID( M24LR_UID * const pUid );
rosarium 0:892175366555 175 NFCTAG_StatusTypeDef i2c_ReadDSFID( uint8_t * const pDsfid );
rosarium 0:892175366555 176 NFCTAG_StatusTypeDef i2c_ReadAFI( uint8_t * const pAfi );
rosarium 0:892175366555 177 NFCTAG_StatusTypeDef i2c_ReadI2CLockSector( M24LR_Lock_Sectors * const pLock_sector );
rosarium 0:892175366555 178 NFCTAG_StatusTypeDef i2c_I2CLockSector( const uint8_t Sector );
rosarium 0:892175366555 179 NFCTAG_StatusTypeDef i2c_I2CUnlockSector( const uint8_t Sector );
rosarium 0:892175366555 180 NFCTAG_StatusTypeDef i2c_PresentI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 181 NFCTAG_StatusTypeDef i2c_WriteI2CPassword( const uint32_t PassWord );
rosarium 0:892175366555 182 NFCTAG_StatusTypeDef i2c_ReadSSSx( const uint8_t SectorNb, M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 183 NFCTAG_StatusTypeDef i2c_WriteSSSx( const uint8_t SectorNb, const M24LR_SECTOR_SEC * const pData );
rosarium 0:892175366555 184 NFCTAG_StatusTypeDef i2c_ReadMemSize( M24LR_Mem_Size * const pSizeInfo );
rosarium 0:892175366555 185 NFCTAG_StatusTypeDef i2c_GetRF_WIP_BUSY( M24LR_GPO_STATUS * const pRf_Wip_Busy );
rosarium 0:892175366555 186 NFCTAG_StatusTypeDef i2c_SetRFBUSY( void );
rosarium 0:892175366555 187 NFCTAG_StatusTypeDef i2c_SetRFWIP( void );
rosarium 0:892175366555 188 NFCTAG_StatusTypeDef i2c_Read_EH_mode( M24LR_EH_MODE_STATUS * const pEH_mode );
rosarium 0:892175366555 189 NFCTAG_StatusTypeDef i2c_Enable_EH_mode( void );
rosarium 0:892175366555 190 NFCTAG_StatusTypeDef i2c_Disable_EH_mode( void );
rosarium 0:892175366555 191 NFCTAG_StatusTypeDef i2c_ReadEH_Cfg( M24LR_EH_CFG_VOUT * const pEH_Cfg );
rosarium 0:892175366555 192 NFCTAG_StatusTypeDef i2c_WriteEH_Cfg( const M24LR_EH_CFG_VOUT EH_Cfg );
rosarium 0:892175366555 193 NFCTAG_StatusTypeDef i2c_GetEH( M24LR_EH_STATUS * const pEH_Val );
rosarium 0:892175366555 194 NFCTAG_StatusTypeDef i2c_SetEH( void );
rosarium 0:892175366555 195 NFCTAG_StatusTypeDef i2c_ResetEH( void );
rosarium 0:892175366555 196 NFCTAG_StatusTypeDef i2c_GetRFField( M24LR_FIELD_STATUS * const pRF_Field );
rosarium 0:892175366555 197 NFCTAG_StatusTypeDef i2c_GetTProg( M24LR_T_PROG_STATUS * const pT_Prog );
rosarium 0:892175366555 198
rosarium 0:892175366555 199 void Enable_EnergyHarvesting( void );
rosarium 0:892175366555 200 NFCTAG_StatusTypeDef Initialization( void );
rosarium 0:892175366555 201
rosarium 0:892175366555 202 M24LR(uint8_t const address, uint8_t const addressData, DevI2C &devI2C ):
rosarium 0:892175366555 203 i2c_address_syst(address), i2c_address_data(addressData), dev_I2C(devI2C) {}
rosarium 0:892175366555 204
rosarium 0:892175366555 205 static uint8_t NfctagInitialized;
rosarium 0:892175366555 206 // M24LR_IO mM24LR_IO;
rosarium 0:892175366555 207 uint8_t i2c_address_syst;
rosarium 0:892175366555 208
rosarium 0:892175366555 209 uint8_t i2c_address_data;
rosarium 0:892175366555 210 DevI2C dev_I2C;
rosarium 0:892175366555 211 friend class NDEF_URI;
rosarium 0:892175366555 212 //NDEF_URI mM24LR_URI;
rosarium 0:892175366555 213 //M24LR *ptr;
rosarium 0:892175366555 214 // ReadFnDataPtr i2c_ReadData;
rosarium 0:892175366555 215 // WriteFnDataPtr i2c_WriteData;
rosarium 0:892175366555 216
rosarium 0:892175366555 217 };
rosarium 0:892175366555 218
rosarium 0:892175366555 219
rosarium 0:892175366555 220
rosarium 0:892175366555 221
rosarium 0:892175366555 222 #endif /* __M24LR_H */
rosarium 0:892175366555 223