This is a driver needed by NFCEEPROOM constructor for the ST ST25DV NFC chip.
Dependents: mbed-os-example-nfc-EEPROM
st25dv_driver.h@0:dd89565c6276, 2020-01-28 (annotated)
- Committer:
- apalmieri
- Date:
- Tue Jan 28 15:54:19 2020 +0000
- Revision:
- 0:dd89565c6276
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
apalmieri | 0:dd89565c6276 | 1 | /** |
apalmieri | 0:dd89565c6276 | 2 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 3 | * @file st25dv_driver.h |
apalmieri | 0:dd89565c6276 | 4 | * @author ST Central Labs |
apalmieri | 0:dd89565c6276 | 5 | * @brief This file provides a set of functions to interface with the ST25DV |
apalmieri | 0:dd89565c6276 | 6 | * device. |
apalmieri | 0:dd89565c6276 | 7 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 8 | * @attention |
apalmieri | 0:dd89565c6276 | 9 | * |
apalmieri | 0:dd89565c6276 | 10 | * <h2><center>© COPYRIGHT(c) 2020 STMicroelectronics</center></h2> |
apalmieri | 0:dd89565c6276 | 11 | * |
apalmieri | 0:dd89565c6276 | 12 | * Redistribution and use in source and binary forms, with or without modification, |
apalmieri | 0:dd89565c6276 | 13 | * are permitted provided that the following conditions are met: |
apalmieri | 0:dd89565c6276 | 14 | * 1. Redistributions of source code must retain the above copyright notice, |
apalmieri | 0:dd89565c6276 | 15 | * this list of conditions and the following disclaimer. |
apalmieri | 0:dd89565c6276 | 16 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
apalmieri | 0:dd89565c6276 | 17 | * this list of conditions and the following disclaimer in the documentation |
apalmieri | 0:dd89565c6276 | 18 | * and/or other materials provided with the distribution. |
apalmieri | 0:dd89565c6276 | 19 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
apalmieri | 0:dd89565c6276 | 20 | * may be used to endorse or promote products derived from this software |
apalmieri | 0:dd89565c6276 | 21 | * without specific prior written permission. |
apalmieri | 0:dd89565c6276 | 22 | * |
apalmieri | 0:dd89565c6276 | 23 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
apalmieri | 0:dd89565c6276 | 24 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
apalmieri | 0:dd89565c6276 | 25 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
apalmieri | 0:dd89565c6276 | 26 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
apalmieri | 0:dd89565c6276 | 27 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
apalmieri | 0:dd89565c6276 | 28 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
apalmieri | 0:dd89565c6276 | 29 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
apalmieri | 0:dd89565c6276 | 30 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
apalmieri | 0:dd89565c6276 | 31 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
apalmieri | 0:dd89565c6276 | 32 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
apalmieri | 0:dd89565c6276 | 33 | * |
apalmieri | 0:dd89565c6276 | 34 | ****************************************************************************** |
apalmieri | 0:dd89565c6276 | 35 | */ |
apalmieri | 0:dd89565c6276 | 36 | |
apalmieri | 0:dd89565c6276 | 37 | #ifndef ST25DV_H |
apalmieri | 0:dd89565c6276 | 38 | #define ST25DV_H |
apalmieri | 0:dd89565c6276 | 39 | |
apalmieri | 0:dd89565c6276 | 40 | #include <stdint.h> |
apalmieri | 0:dd89565c6276 | 41 | #include <mbed.h> |
apalmieri | 0:dd89565c6276 | 42 | #include "I2C.h" |
apalmieri | 0:dd89565c6276 | 43 | #include "NFCEEPROMDriver.h" |
apalmieri | 0:dd89565c6276 | 44 | #include "EventQueue.h" |
apalmieri | 0:dd89565c6276 | 45 | #include "st25dv.h" |
apalmieri | 0:dd89565c6276 | 46 | |
apalmieri | 0:dd89565c6276 | 47 | #if defined MBED_CONF_X_NUCLEO_NFC04A1 |
apalmieri | 0:dd89565c6276 | 48 | |
apalmieri | 0:dd89565c6276 | 49 | #define ST25DV_I2C_SDA_PIN D14 |
apalmieri | 0:dd89565c6276 | 50 | #define ST25DV_I2C_SCL_PIN D15 |
apalmieri | 0:dd89565c6276 | 51 | #define ST25DV_LPD_PIN D7 |
apalmieri | 0:dd89565c6276 | 52 | #define ST25DV_GPO_PIN D12 |
apalmieri | 0:dd89565c6276 | 53 | #define ST25DV_LED1_PIN D5 |
apalmieri | 0:dd89565c6276 | 54 | #define ST25DV_LED2_PIN D4 |
apalmieri | 0:dd89565c6276 | 55 | #define ST25DV_LED3_PIN D2 |
apalmieri | 0:dd89565c6276 | 56 | |
apalmieri | 0:dd89565c6276 | 57 | #else |
apalmieri | 0:dd89565c6276 | 58 | |
apalmieri | 0:dd89565c6276 | 59 | #define ST25DV_I2C_SDA_PIN NC |
apalmieri | 0:dd89565c6276 | 60 | #define ST25DV_I2C_SCL_PIN NC |
apalmieri | 0:dd89565c6276 | 61 | #define ST25DV_LPD_PIN NC |
apalmieri | 0:dd89565c6276 | 62 | #define ST25DV_GPO_PIN NC |
apalmieri | 0:dd89565c6276 | 63 | #define ST25DV_LED1_PIN NC |
apalmieri | 0:dd89565c6276 | 64 | #define ST25DV_LED2_PIN NC |
apalmieri | 0:dd89565c6276 | 65 | #define ST25DV_LED3_PIN NC |
apalmieri | 0:dd89565c6276 | 66 | |
apalmieri | 0:dd89565c6276 | 67 | #endif |
apalmieri | 0:dd89565c6276 | 68 | |
apalmieri | 0:dd89565c6276 | 69 | namespace mbed { |
apalmieri | 0:dd89565c6276 | 70 | namespace nfc { |
apalmieri | 0:dd89565c6276 | 71 | namespace vendor { |
apalmieri | 0:dd89565c6276 | 72 | namespace ST { |
apalmieri | 0:dd89565c6276 | 73 | |
apalmieri | 0:dd89565c6276 | 74 | #ifndef MIN |
apalmieri | 0:dd89565c6276 | 75 | #define MIN(x, y) (((x) < (y)) ? (x) : (y)) |
apalmieri | 0:dd89565c6276 | 76 | #endif |
apalmieri | 0:dd89565c6276 | 77 | |
apalmieri | 0:dd89565c6276 | 78 | #define NFCTAG_4K_SIZE ((uint32_t) 0x200) |
apalmieri | 0:dd89565c6276 | 79 | #define NFCTAG_16K_SIZE ((uint32_t) 0x800) |
apalmieri | 0:dd89565c6276 | 80 | #define NFCTAG_64K_SIZE ((uint32_t) 0x2000) |
apalmieri | 0:dd89565c6276 | 81 | |
apalmieri | 0:dd89565c6276 | 82 | #define MAX_NDEF_MEM 0x200 |
apalmieri | 0:dd89565c6276 | 83 | #define ST25DV_MAX_SIZE NFCTAG_4K_SIZE |
apalmieri | 0:dd89565c6276 | 84 | #define ST25DV_NDEF_MAX_SIZE MIN(ST25DV_MAX_SIZE,MAX_NDEF_MEM) |
apalmieri | 0:dd89565c6276 | 85 | #define NFC_DEVICE_MAX_NDEFMEMORY ST25DV_NDEF_MAX_SIZE |
apalmieri | 0:dd89565c6276 | 86 | |
apalmieri | 0:dd89565c6276 | 87 | /* Error codes for Higher level */ |
apalmieri | 0:dd89565c6276 | 88 | #define NDEF_OK 0 |
apalmieri | 0:dd89565c6276 | 89 | #define NDEF_ERROR 1 |
apalmieri | 0:dd89565c6276 | 90 | #define NDEF_ERROR_MEMORY_TAG 2 |
apalmieri | 0:dd89565c6276 | 91 | #define NDEF_ERROR_MEMORY_INTERNAL 3 |
apalmieri | 0:dd89565c6276 | 92 | #define NDEF_ERROR_LOCKED 4 |
apalmieri | 0:dd89565c6276 | 93 | #define NDEF_ERROR_NOT_FORMATTED 5 |
apalmieri | 0:dd89565c6276 | 94 | |
apalmieri | 0:dd89565c6276 | 95 | #define NDEF_MAX_SIZE NFC_DEVICE_MAX_NDEFMEMORY |
apalmieri | 0:dd89565c6276 | 96 | #define NDEF_RECORD_MAX_SIZE NFC_DEVICE_MAX_NDEFMEMORY |
apalmieri | 0:dd89565c6276 | 97 | |
apalmieri | 0:dd89565c6276 | 98 | /** @brief Memory size value indicating that this is a 8-bytes Capability Container */ |
apalmieri | 0:dd89565c6276 | 99 | #define NFCT5_EXTENDED_CCFILE 0x00 |
apalmieri | 0:dd89565c6276 | 100 | /** @brief Capability container version 1.0 */ |
apalmieri | 0:dd89565c6276 | 101 | #define NFCT5_VERSION_V1_0 0x40 |
apalmieri | 0:dd89565c6276 | 102 | /** @brief Read access condition mask for the Capability Container byte1 */ |
apalmieri | 0:dd89565c6276 | 103 | #define NFCT5_READ_ACCESS 0x0C |
apalmieri | 0:dd89565c6276 | 104 | /** @brief Write access condition mask for the Capability Container byte1 */ |
apalmieri | 0:dd89565c6276 | 105 | #define NFCT5_WRITE_ACCESS 0x03 |
apalmieri | 0:dd89565c6276 | 106 | |
apalmieri | 0:dd89565c6276 | 107 | /** @brief Type5 Tag NDEF message TLV-Type. */ |
apalmieri | 0:dd89565c6276 | 108 | #define NFCT5_NDEF_MSG_TLV ((uint8_t) 0x03) |
apalmieri | 0:dd89565c6276 | 109 | /** @brief Type5 Tag Proprietary message TLV-Type. */ |
apalmieri | 0:dd89565c6276 | 110 | #define NFCT5_PROPRIETARY_TLV ((uint8_t) 0xFD) |
apalmieri | 0:dd89565c6276 | 111 | /** @brief Type5 Tag Terminator TLV-Type. */ |
apalmieri | 0:dd89565c6276 | 112 | #define NFCT5_TERMINATOR_TLV ((uint8_t) 0xFE) |
apalmieri | 0:dd89565c6276 | 113 | /** @brief TLV-Length indicating a 4-bytes TLV (Length coded on 2 bytes). */ |
apalmieri | 0:dd89565c6276 | 114 | #define NFCT5_3_BYTES_L_TLV ((uint8_t) 0xFF) |
apalmieri | 0:dd89565c6276 | 115 | |
apalmieri | 0:dd89565c6276 | 116 | #define MAX_NDEF_SIZE NFC_DEVICE_MAX_NDEFMEMORY |
apalmieri | 0:dd89565c6276 | 117 | |
apalmieri | 0:dd89565c6276 | 118 | typedef enum |
apalmieri | 0:dd89565c6276 | 119 | { |
apalmieri | 0:dd89565c6276 | 120 | TT5_NO_NDEF = 0, /**< No data detected in the tag. */ |
apalmieri | 0:dd89565c6276 | 121 | TT5_INITIALIZED, /**< Capability container detected. */ |
apalmieri | 0:dd89565c6276 | 122 | TT5_READ_WRITE, /**< Read-Write data detected. */ |
apalmieri | 0:dd89565c6276 | 123 | TT5_READ /**< Read-Only data message detected. */ |
apalmieri | 0:dd89565c6276 | 124 | } TT5_State; |
apalmieri | 0:dd89565c6276 | 125 | |
apalmieri | 0:dd89565c6276 | 126 | /** @brief Type5 Tag Capability Container Magic numbers as defined by the NFC Forum. */ |
apalmieri | 0:dd89565c6276 | 127 | typedef enum { |
apalmieri | 0:dd89565c6276 | 128 | NFCT5_MAGICNUMBER_E1_CCFILE = 0xE1, /**< Complete data area can be read by 1-byte block adrdess commands. */ |
apalmieri | 0:dd89565c6276 | 129 | NFCT5_MAGICNUMBER_E2_CCFILE = 0xE2 /**< Last part of the data area can be only read by 2-bytes block address commands.\n |
apalmieri | 0:dd89565c6276 | 130 | The first 256 blocks can be read by 1-byte block address commands. */ |
apalmieri | 0:dd89565c6276 | 131 | } TT5_MagicNumber_t; |
apalmieri | 0:dd89565c6276 | 132 | |
apalmieri | 0:dd89565c6276 | 133 | /** |
apalmieri | 0:dd89565c6276 | 134 | * @brief Type5 Tag Capability Container structure. |
apalmieri | 0:dd89565c6276 | 135 | */ |
apalmieri | 0:dd89565c6276 | 136 | typedef struct |
apalmieri | 0:dd89565c6276 | 137 | { |
apalmieri | 0:dd89565c6276 | 138 | TT5_MagicNumber_t MagicNumber; /**< CCfile[0]: Magic Number should be E1h or E2h (for extended API) */ |
apalmieri | 0:dd89565c6276 | 139 | uint8_t Version; /**< CCfile[1]: Capability container version (b7-b4) and access conditions (b3-b0) */ |
apalmieri | 0:dd89565c6276 | 140 | uint8_t MemorySize; /**< CCfile[2]: Memory size, expressed in 8 bytes blocks, set to 0 if tag size is greater than 16kbits. */ |
apalmieri | 0:dd89565c6276 | 141 | uint8_t TT5Tag; /**< CCfile[3]: Additionnal information on the Type5 Tag:\n |
apalmieri | 0:dd89565c6276 | 142 | b0: supports `read multiple block` commands\n |
apalmieri | 0:dd89565c6276 | 143 | b1: RFU\n |
apalmieri | 0:dd89565c6276 | 144 | b2: RFU\n |
apalmieri | 0:dd89565c6276 | 145 | b3: supports `lock block` commands\n |
apalmieri | 0:dd89565c6276 | 146 | b4: requires the `special frame` format |
apalmieri | 0:dd89565c6276 | 147 | */ |
apalmieri | 0:dd89565c6276 | 148 | uint8_t rsved1; /**< RFU */ |
apalmieri | 0:dd89565c6276 | 149 | uint8_t rsved2; /**< RFU */ |
apalmieri | 0:dd89565c6276 | 150 | uint16_t ExtMemorySize; /**< CCfile[6],CCfile[7]: Memory size, expressed in 8 bytes blocks, when tag size is greater than 16kbits. */ |
apalmieri | 0:dd89565c6276 | 151 | TT5_State State; /**< Indicates if a NDEF message is present. */ |
apalmieri | 0:dd89565c6276 | 152 | uint32_t NDEF_offset; /**< Indicates the address of a NDEF message in the tag. */ |
apalmieri | 0:dd89565c6276 | 153 | }sCCFileInfo; |
apalmieri | 0:dd89565c6276 | 154 | |
apalmieri | 0:dd89565c6276 | 155 | /** @brief Type5 Tag Type-Length-Value structure as defined by the NFC Forum */ |
apalmieri | 0:dd89565c6276 | 156 | typedef struct |
apalmieri | 0:dd89565c6276 | 157 | { |
apalmieri | 0:dd89565c6276 | 158 | uint8_t Type; /**< NFC Forum message Type */ |
apalmieri | 0:dd89565c6276 | 159 | uint8_t Length; /**< Message length if lesser than 255 bytes */ |
apalmieri | 0:dd89565c6276 | 160 | uint16_t Length16; /**< Message length if greater than or equal to 255 bytes */ |
apalmieri | 0:dd89565c6276 | 161 | } TT5_TLV_t; |
apalmieri | 0:dd89565c6276 | 162 | |
apalmieri | 0:dd89565c6276 | 163 | class ST25dvDriver : public NFCEEPROMDriver { |
apalmieri | 0:dd89565c6276 | 164 | |
apalmieri | 0:dd89565c6276 | 165 | public: |
apalmieri | 0:dd89565c6276 | 166 | /** Create the driver, default pin names will be used appropriate for the board. |
apalmieri | 0:dd89565c6276 | 167 | * @param i2c_data_pin I2C data pin name. |
apalmieri | 0:dd89565c6276 | 168 | * @param i2c_clock_pin I2C clock pin name. |
apalmieri | 0:dd89565c6276 | 169 | * @param gpo_pin I2C GPO pin name. |
apalmieri | 0:dd89565c6276 | 170 | * @param rf_disable_pin pin name for breaking the RF connection. |
apalmieri | 0:dd89565c6276 | 171 | */ |
apalmieri | 0:dd89565c6276 | 172 | ST25dvDriver(PinName i2c_data_pin = ST25DV_I2C_SDA_PIN, |
apalmieri | 0:dd89565c6276 | 173 | PinName i2c_clock_pin = ST25DV_I2C_SCL_PIN, |
apalmieri | 0:dd89565c6276 | 174 | PinName led1_pin = ST25DV_LED1_PIN, |
apalmieri | 0:dd89565c6276 | 175 | PinName led2_pin = ST25DV_LED2_PIN, |
apalmieri | 0:dd89565c6276 | 176 | PinName led3_pin = ST25DV_LED3_PIN, |
apalmieri | 0:dd89565c6276 | 177 | PinName lpd_pin = ST25DV_LPD_PIN, |
apalmieri | 0:dd89565c6276 | 178 | PinName gpo_pin = ST25DV_GPO_PIN); |
apalmieri | 0:dd89565c6276 | 179 | |
apalmieri | 0:dd89565c6276 | 180 | virtual ~ST25dvDriver() { } |
apalmieri | 0:dd89565c6276 | 181 | |
apalmieri | 0:dd89565c6276 | 182 | /** @see NFCEEPROMDriver::reset |
apalmieri | 0:dd89565c6276 | 183 | */ |
apalmieri | 0:dd89565c6276 | 184 | virtual void reset() { |
apalmieri | 0:dd89565c6276 | 185 | printf("reset\r\n"); |
apalmieri | 0:dd89565c6276 | 186 | begin(); |
apalmieri | 0:dd89565c6276 | 187 | } |
apalmieri | 0:dd89565c6276 | 188 | |
apalmieri | 0:dd89565c6276 | 189 | /** @see NFCEEPROMDriver::get_max_size |
apalmieri | 0:dd89565c6276 | 190 | */ |
apalmieri | 0:dd89565c6276 | 191 | virtual size_t read_max_size() { |
apalmieri | 0:dd89565c6276 | 192 | return MAX_NDEF_SIZE; |
apalmieri | 0:dd89565c6276 | 193 | } |
apalmieri | 0:dd89565c6276 | 194 | |
apalmieri | 0:dd89565c6276 | 195 | /** @see NFCEEPROMDriver::start_session |
apalmieri | 0:dd89565c6276 | 196 | */ |
apalmieri | 0:dd89565c6276 | 197 | virtual void start_session(bool force = true) { |
apalmieri | 0:dd89565c6276 | 198 | printf("start_session\r\n"); |
apalmieri | 0:dd89565c6276 | 199 | if(_is_device_inited) { |
apalmieri | 0:dd89565c6276 | 200 | _is_session_started = true; |
apalmieri | 0:dd89565c6276 | 201 | delegate()->on_session_started(true); |
apalmieri | 0:dd89565c6276 | 202 | } else { |
apalmieri | 0:dd89565c6276 | 203 | delegate()->on_session_started(false); |
apalmieri | 0:dd89565c6276 | 204 | } |
apalmieri | 0:dd89565c6276 | 205 | } |
apalmieri | 0:dd89565c6276 | 206 | |
apalmieri | 0:dd89565c6276 | 207 | /** @see NFCEEPROMDriver::end_session |
apalmieri | 0:dd89565c6276 | 208 | */ |
apalmieri | 0:dd89565c6276 | 209 | virtual void end_session() { |
apalmieri | 0:dd89565c6276 | 210 | printf("end_session\r\n"); |
apalmieri | 0:dd89565c6276 | 211 | if(_is_session_started) { |
apalmieri | 0:dd89565c6276 | 212 | _is_session_started = false; |
apalmieri | 0:dd89565c6276 | 213 | delegate()->on_session_ended(true); |
apalmieri | 0:dd89565c6276 | 214 | } else { |
apalmieri | 0:dd89565c6276 | 215 | delegate()->on_session_ended(false); |
apalmieri | 0:dd89565c6276 | 216 | } |
apalmieri | 0:dd89565c6276 | 217 | } |
apalmieri | 0:dd89565c6276 | 218 | |
apalmieri | 0:dd89565c6276 | 219 | /** @see NFCEEPROMDriver::read_bytes |
apalmieri | 0:dd89565c6276 | 220 | */ |
apalmieri | 0:dd89565c6276 | 221 | virtual void read_bytes(uint32_t address, uint8_t* bytes, size_t count) { |
apalmieri | 0:dd89565c6276 | 222 | int ret; |
apalmieri | 0:dd89565c6276 | 223 | printf("read_bytes\r\n"); |
apalmieri | 0:dd89565c6276 | 224 | |
apalmieri | 0:dd89565c6276 | 225 | if (address > _ndef_size) { |
apalmieri | 0:dd89565c6276 | 226 | delegate()->on_bytes_read(0); |
apalmieri | 0:dd89565c6276 | 227 | return; |
apalmieri | 0:dd89565c6276 | 228 | } |
apalmieri | 0:dd89565c6276 | 229 | |
apalmieri | 0:dd89565c6276 | 230 | ret = read_data(address, bytes, count); |
apalmieri | 0:dd89565c6276 | 231 | printf("read_bytes read_data ret =%d count=%d bytes=%s\r\n", ret, count, bytes); |
apalmieri | 0:dd89565c6276 | 232 | if(ret != 0) { |
apalmieri | 0:dd89565c6276 | 233 | delegate()->on_bytes_read(0); |
apalmieri | 0:dd89565c6276 | 234 | } else { |
apalmieri | 0:dd89565c6276 | 235 | delegate()->on_bytes_read(count); |
apalmieri | 0:dd89565c6276 | 236 | } |
apalmieri | 0:dd89565c6276 | 237 | } |
apalmieri | 0:dd89565c6276 | 238 | |
apalmieri | 0:dd89565c6276 | 239 | /** @see NFCEEPROMDriver::write_bytes |
apalmieri | 0:dd89565c6276 | 240 | */ |
apalmieri | 0:dd89565c6276 | 241 | virtual void write_bytes(uint32_t address, const uint8_t* bytes, size_t count) { |
apalmieri | 0:dd89565c6276 | 242 | int ret; |
apalmieri | 0:dd89565c6276 | 243 | printf("write_bytes\r\n"); |
apalmieri | 0:dd89565c6276 | 244 | if (address > _ndef_size) { |
apalmieri | 0:dd89565c6276 | 245 | delegate()->on_bytes_written(0); |
apalmieri | 0:dd89565c6276 | 246 | printf("write_bytes error (address > _ndef_size)\r\n"); |
apalmieri | 0:dd89565c6276 | 247 | return; |
apalmieri | 0:dd89565c6276 | 248 | } |
apalmieri | 0:dd89565c6276 | 249 | |
apalmieri | 0:dd89565c6276 | 250 | ret = write_data(address, bytes, count); |
apalmieri | 0:dd89565c6276 | 251 | printf("write_bytes write_data ret =%d count=%d bytes=%s\r\n", ret, count, bytes); |
apalmieri | 0:dd89565c6276 | 252 | if(ret != 0) { |
apalmieri | 0:dd89565c6276 | 253 | delegate()->on_bytes_written(0); |
apalmieri | 0:dd89565c6276 | 254 | } else { |
apalmieri | 0:dd89565c6276 | 255 | delegate()->on_bytes_written(count); |
apalmieri | 0:dd89565c6276 | 256 | } |
apalmieri | 0:dd89565c6276 | 257 | } |
apalmieri | 0:dd89565c6276 | 258 | |
apalmieri | 0:dd89565c6276 | 259 | /** @see NFCEEPROMDriver::write_size |
apalmieri | 0:dd89565c6276 | 260 | */ |
apalmieri | 0:dd89565c6276 | 261 | virtual void write_size(size_t count) { |
apalmieri | 0:dd89565c6276 | 262 | int ret; |
apalmieri | 0:dd89565c6276 | 263 | printf("write_size (count=%d)\r\n", count); |
apalmieri | 0:dd89565c6276 | 264 | if (!_is_session_started) { |
apalmieri | 0:dd89565c6276 | 265 | delegate()->on_size_written(false); |
apalmieri | 0:dd89565c6276 | 266 | return; |
apalmieri | 0:dd89565c6276 | 267 | } |
apalmieri | 0:dd89565c6276 | 268 | _ndef_size = count; |
apalmieri | 0:dd89565c6276 | 269 | |
apalmieri | 0:dd89565c6276 | 270 | ret = set_size(count); |
apalmieri | 0:dd89565c6276 | 271 | if(ret != 0) { |
apalmieri | 0:dd89565c6276 | 272 | delegate()->on_size_written(false); |
apalmieri | 0:dd89565c6276 | 273 | } else { |
apalmieri | 0:dd89565c6276 | 274 | delegate()->on_size_written(true); |
apalmieri | 0:dd89565c6276 | 275 | } |
apalmieri | 0:dd89565c6276 | 276 | } |
apalmieri | 0:dd89565c6276 | 277 | |
apalmieri | 0:dd89565c6276 | 278 | /** @see NFCEEPROMDriver::read_size |
apalmieri | 0:dd89565c6276 | 279 | */ |
apalmieri | 0:dd89565c6276 | 280 | virtual void read_size() { |
apalmieri | 0:dd89565c6276 | 281 | int ret; |
apalmieri | 0:dd89565c6276 | 282 | printf("read_size\r\n"); |
apalmieri | 0:dd89565c6276 | 283 | if (!_is_session_started) { |
apalmieri | 0:dd89565c6276 | 284 | delegate()->on_size_read(false, 0); |
apalmieri | 0:dd89565c6276 | 285 | return; |
apalmieri | 0:dd89565c6276 | 286 | } |
apalmieri | 0:dd89565c6276 | 287 | |
apalmieri | 0:dd89565c6276 | 288 | ret = get_size(); |
apalmieri | 0:dd89565c6276 | 289 | if(ret != 0) { |
apalmieri | 0:dd89565c6276 | 290 | delegate()->on_size_read(false, 0); |
apalmieri | 0:dd89565c6276 | 291 | } else { |
apalmieri | 0:dd89565c6276 | 292 | delegate()->on_size_read(true, _ndef_size); |
apalmieri | 0:dd89565c6276 | 293 | } |
apalmieri | 0:dd89565c6276 | 294 | printf("read_size _ndef_size=%d\r\n", _ndef_size); |
apalmieri | 0:dd89565c6276 | 295 | } |
apalmieri | 0:dd89565c6276 | 296 | |
apalmieri | 0:dd89565c6276 | 297 | /** @see NFCEEPROMDriver::erase_bytes |
apalmieri | 0:dd89565c6276 | 298 | */ |
apalmieri | 0:dd89565c6276 | 299 | virtual void erase_bytes(uint32_t address, size_t size) { |
apalmieri | 0:dd89565c6276 | 300 | printf("erase_bytes\r\n"); |
apalmieri | 0:dd89565c6276 | 301 | write_data(address, NULL, size); |
apalmieri | 0:dd89565c6276 | 302 | } |
apalmieri | 0:dd89565c6276 | 303 | |
apalmieri | 0:dd89565c6276 | 304 | private: |
apalmieri | 0:dd89565c6276 | 305 | int begin(); |
apalmieri | 0:dd89565c6276 | 306 | int read_data(uint32_t address, uint8_t* bytes, size_t count); |
apalmieri | 0:dd89565c6276 | 307 | int write_data(uint32_t address, const uint8_t* bytes, size_t count); |
apalmieri | 0:dd89565c6276 | 308 | int get_size(void); |
apalmieri | 0:dd89565c6276 | 309 | int set_size(size_t count); |
apalmieri | 0:dd89565c6276 | 310 | |
apalmieri | 0:dd89565c6276 | 311 | NFCTAG_StatusTypeDef NFCTAG_Init(void); |
apalmieri | 0:dd89565c6276 | 312 | NFCTAG_StatusTypeDef NFCTAG_ReadData(uint8_t * const pData, const uint16_t TarAddr, const uint16_t Size); |
apalmieri | 0:dd89565c6276 | 313 | NFCTAG_StatusTypeDef NFCTAG_WriteData(const uint8_t * const pData, const uint16_t TarAddr, const uint16_t Size); |
apalmieri | 0:dd89565c6276 | 314 | uint32_t NFCTAG_GetByteSize(void); |
apalmieri | 0:dd89565c6276 | 315 | NFCTAG_ExtDrvTypeDef *NFCTAG_GetExtended_Drv(void); |
apalmieri | 0:dd89565c6276 | 316 | uint16_t NfcType5_NDEFDetection(void); |
apalmieri | 0:dd89565c6276 | 317 | uint16_t NfcType5_TT5Init(void); |
apalmieri | 0:dd89565c6276 | 318 | uint16_t NfcType5_WriteCCFile( const uint8_t * const pCCBuffer ); |
apalmieri | 0:dd89565c6276 | 319 | uint16_t NfcType5_ReadCCFile( uint8_t * const pCCBuffer ); |
apalmieri | 0:dd89565c6276 | 320 | uint16_t NfcType5_ReadNDEF(uint8_t* pData); |
apalmieri | 0:dd89565c6276 | 321 | uint16_t NfcType5_WriteNDEF(uint16_t Length, uint8_t* pData); |
apalmieri | 0:dd89565c6276 | 322 | uint16_t NfcType5_GetLength(uint16_t* Length); |
apalmieri | 0:dd89565c6276 | 323 | uint16_t NfcType5_SetLength(uint16_t Length); |
apalmieri | 0:dd89565c6276 | 324 | |
apalmieri | 0:dd89565c6276 | 325 | void ledOn(DigitalOut led); |
apalmieri | 0:dd89565c6276 | 326 | void ledOff(DigitalOut led); |
apalmieri | 0:dd89565c6276 | 327 | |
apalmieri | 0:dd89565c6276 | 328 | I2C _i2c_channel; |
apalmieri | 0:dd89565c6276 | 329 | NFCTAG_DrvTypeDef *Nfctag_Drv; |
apalmieri | 0:dd89565c6276 | 330 | sCCFileInfo CCFileStruct; |
apalmieri | 0:dd89565c6276 | 331 | |
apalmieri | 0:dd89565c6276 | 332 | DigitalOut _led1_pin; |
apalmieri | 0:dd89565c6276 | 333 | DigitalOut _led2_pin; |
apalmieri | 0:dd89565c6276 | 334 | DigitalOut _led3_pin; |
apalmieri | 0:dd89565c6276 | 335 | DigitalOut _lpd_pin; |
apalmieri | 0:dd89565c6276 | 336 | DigitalIn _gpo_pin; |
apalmieri | 0:dd89565c6276 | 337 | |
apalmieri | 0:dd89565c6276 | 338 | uint16_t _ndef_size; |
apalmieri | 0:dd89565c6276 | 339 | |
apalmieri | 0:dd89565c6276 | 340 | bool _is_device_inited; |
apalmieri | 0:dd89565c6276 | 341 | bool _is_session_started; |
apalmieri | 0:dd89565c6276 | 342 | }; |
apalmieri | 0:dd89565c6276 | 343 | |
apalmieri | 0:dd89565c6276 | 344 | } //ST |
apalmieri | 0:dd89565c6276 | 345 | } //vendor |
apalmieri | 0:dd89565c6276 | 346 | } //nfc |
apalmieri | 0:dd89565c6276 | 347 | } //mbed |
apalmieri | 0:dd89565c6276 | 348 | |
apalmieri | 0:dd89565c6276 | 349 | #endif // ST25DV_H |
apalmieri | 0:dd89565c6276 | 350 | |
apalmieri | 0:dd89565c6276 | 351 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |