nfc2  2.0.0.0
nfc2.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2021 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef NFC2_H
29 #define NFC2_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define NFC2_RF_DISCOVER_MAP_CMD 0x00
70 #define NFC2_RF_DISCOVER_MAP_RSP 0x00
71 #define NFC2_RF_SET_LISTEN_MODE_ROUTING_CMD 0x01
72 #define NFC2_RF_SET_LISTEN_MODE_ROUTING_RSP 0x01
73 #define NFC2_RF_GET_LISTEN_MODE_ROUTING_CMD 0x02
74 #define NFC2_RF_GET_LISTEN_MODE_ROUTING_RSP 0x02
75 #define NFC2_RF_GET_LISTEN_MODE_ROUTING_NTF 0x02
76 #define NFC2_RF_DISCOVER_CMD 0x03
77 #define NFC2_RF_DISCOVER_RSP 0x03
78 #define NFC2_RF_DISCOVER_NTF 0x03
79 #define NFC2_RF_DISCOVER_SELECT_CMD 0x04
80 #define NFC2_RF_DISCOVER_SELECT_RSP 0x04
81 #define NFC2_RF_INTF_ACTIVATED_NTF 0x05
82 #define NFC2_RF_DEACTIVATE_CMD 0x06
83 #define NFC2_RF_DEACTIVATE_RSP 0x06
84 #define NFC2_RF_DEACTIVATE_NTF 0x06
85 #define NFC2_RF_FIELD_INFO_NTF 0x07
86 #define NFC2_RF_T3T_POLLING_CMD 0x08
87 #define NFC2_RF_T3T_POLLING_RSP 0x08
88 #define NFC2_RF_T3T_POLLING_NTF 0x08
89 #define NFC2_RF_NFCEE_ACTION_NTF 0x09
90 #define NFC2_RF_NFCEE_DISCOVERY_REQ_NTF 0x0A
91 #define NFC2_RF_PARAMETER_UPDATE_CMD 0x0B
92 #define NFC2_RF_PARAMETER_UPDATE_RSP 0x0B
93 
94 #define NFC2_NFCEE_DISCOVER_CMD 0x00
95 #define NFC2_NFCEE_DISCOVER_RSP 0x00
96 #define NFC2_NFCEE_DISCOVER_NTF 0x00
97 #define NFC2_NFCEE_MODE_SET_CMD 0x01
98 #define NFC2_NFCEE_MODE_SET_RSP 0x01
99 
100 #define NFC2_NCI_PROPRIETARY_ACT_CMD 0x02
101 #define NFC2_NCI_PROPRIETARY_ACT_RSP 0x02
102 #define NFC2_RESET_KEEP_CONFIG 0x00
103 #define NFC2_RESET_CLEAR_CONFIG 0x01
104 
109 #define NFC2_STATUS_OK 0x00
110 #define NFC2_STATUS_REJECTED 0x01
111 #define NFC2_STATUS_RF_FRAME_CORRUPTED 0x02
112 #define NFC2_STATUS_FAILED 0x03
113 #define NFC2_STATUS_NOT_INITIALIZED 0x04
114 #define NFC2_STATUS_SYNTAX_ERROR 0x05
115 #define NFC2_STATUS_SEMANTIC_ERROR 0x06
116 
117 #define NFC2_STATUS_INVALID_PARAM 0x09
118 #define NFC2_STATUS_MESSAGE_SIZE_EXCEEDED 0x0A
119 
120 #define NFC2_DISCOVERY_ALREADY_STARTED 0xA0
121 #define NFC2_DISCOVERY_TARGET_ACTIVATION_FAILED 0xA1
122 #define NFC2_DISCOVERY_TEAR_DOWN 0xA2
123 
124 #define NFC2_RF_TRANSMISSION_ERROR 0xB0
125 #define NFC2_RF_PROTOCOL_ERROR 0xB1
126 #define NFC2_RF_TIMEOUT_ERROR 0xB2
127 
128 #define NFC2_NFCEE_INTERFACE_ACTIVATION_FAILED 0xC0
129 #define NFC2_NFCEE_TRANSMISSION_ERROR 0xC1
130 #define NFC2_NFCEE_PROTOCOL_ERROR 0xC2
131 #define NFC2_NFCEE_TIMEOUT_ERROR 0xC3
132 
133 #define NFC2_NFC_RF_TECHNOLOGY_A 0x00
134 #define NFC2_NFC_RF_TECHNOLOGY_B 0x01
135 #define NFC2_NFC_RF_TECHNOLOGY_F 0x02
136 #define NFC2_NFC_RF_TECHNOLOGY_15693 0x03
137 
142 #define NFC2_NFC_A_PASSIVE_POLL_MODE 0x00
143 #define NFC2_NFC_B_PASSIVE_POLL_MODE 0x01
144 #define NFC2_NFC_F_PASSIVE_POLL_MODE 0x02
145 #define NFC2_NFC_A_ACTIVE_POLL_MODE 0x03
146 #define NFC2_NFC_F_ACTIVE_POLL_MODE 0x05
147 #define NFC2_NFC_15693_PASSIVE_POLL_MODE 0x06
148 
149 #define NFC2_NFC_A_PASSIVE_LISTEN_MODE 0x80
150 #define NFC2_NFC_B_PASSIVE_LISTEN_MODE 0x81
151 #define NFC2_NFC_F_PASSIVE_LISTEN_MODE 0x82
152 #define NFC2_NFC_A_ACTIVE_LISTEN_MODE 0x83
153 #define NFC2_NFC_F_ACTIVE_LISTEN_MODE 0x85
154 #define NFC2_NFC_15693_PASSIVE_LISTEN_MODE 0x86
155 
160 #define NFC2_PROTOCOL_UNDETERMINED 0x00
161 #define NFC2_PROTOCOL_T1T 0x01
162 #define NFC2_PROTOCOL_T2T 0x02
163 #define NFC2_PROTOCOL_T3T 0x03
164 #define NFC2_PROTOCOL_ISO_DEP 0x04
165 #define NFC2_PROTOCOL_NFC_DEP 0x05
166 
167 #define NFC2_NFCEE_DIRECT_RF_INTERFACE 0x00
168 #define NFC2_FRAME_RF_INTERFACE 0x01
169 #define NFC2_ISO_DEP_RF_INTERFACE 0x02
170 #define NFC2_NFC_DEP_RF_INTERFACE 0x03
171 
176 #define NFC2_APDU 0x00
177 #define NFC2_HCI_ACCES 0x01
178 #define NFC2_TYPE_3_TAG_COMMAND_SET 0x02
179 #define NFC2_TRANSPARENT 0x03
180 
185 #define NFC2_NFC_BIT_RATE_106 0x00
186 #define NFC2_NFC_BIT_RATE_212 0x01
187 #define NFC2_NFC_BIT_RATE_424 0x02
188 #define NFC2_NFC_BIT_RATE_848 0x03
189 #define NFC2_NFC_BIT_RATE_1695 0x04
190 #define NFC2_NFC_BIT_RATE_3390 0x05
191 #define NFC2_NFC_BIT_RATE_6780 0x06
192 
197 #define NFC2_IRQ_STATE_LOW 0x00
198 #define NFC2_IRQ_STATE_HIGH 0x01
199 
204 #define NFC2_GROUP_ID_CORE 0x00
205 #define NFC2_GROUP_ID_RF_MANAGEMENT 0x01
206 #define NFC2_GROUP_ID_NFC_MANAGEMENT 0x02
207 #define NFC2_GROUP_ID_PROPRIETARY 0x0F
208 
213 #define NFC2_CORE_RESET_CMD 0x00
214 #define NFC2_CORE_RESET_RSP 0x00
215 #define NFC2_CORE_RESET_NTF 0x00
216 #define NFC2_CORE_INIT_CMD 0x01
217 #define NFC2_CORE_INIT_RSP 0x01
218 #define NFC2_CORE_SET_CONFIG_CMD 0x02
219 #define NFC2_CORE_SET_CONFIG_RSP 0x02
220 #define NFC2_CORE_GET_CONFIG_CMD 0x03
221 #define NFC2_CORE_GET_CONFIG_RSP 0x03
222 #define NFC2_CORE_CONN_CREATE_CMD 0x04
223 #define NFC2_CORE_CONN_CREATE_RSP 0x04
224 #define NFC2_CORE_CONN_CLOSE_CMD 0x05
225 #define NFC2_CORE_CONN_CLOSE_RSP 0x05
226 #define NFC2_CORE_CONN_CREDITS_NTF 0x06
227 #define NFC2_CORE_GENERIC_ERROR_NTF 0x07
228 #define NFC2_CORE_INTERFACE_ERROR_NTF 0x08
229 
235 #define NFC2_I2C_ADDR_0 0x28
236 #define NFC2_I2C_ADDR_1 0x29
237 #define NFC2_I2C_ADDR_2 0x2A
238 #define NFC2_I2C_ADDR_3 0x2B
239  // nfc2_set
241 
256 #define NFC2_MAP_MIKROBUS( cfg, mikrobus ) \
257  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
258  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
259  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
260  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
261  // nfc2_map // nfc2
264 
269 typedef struct
270 {
271  // Output pins
272  digital_out_t rst;
274  // Input pins
275  digital_in_t int_pin;
277  // Modules
278  i2c_master_t i2c;
280  // I2C slave address
281  uint8_t slave_address;
283 } nfc2_t;
284 
289 typedef struct
290 {
291  pin_name_t scl;
292  pin_name_t sda;
294  pin_name_t rst;
295  pin_name_t int_pin;
297  uint32_t i2c_speed;
298  uint8_t i2c_address;
300 } nfc2_cfg_t;
301 
306 typedef struct
307 {
308  uint8_t message_type;
309  uint8_t pck_bound_flag;
310  uint8_t group_ident;
311  uint8_t opcode_ident;
312  uint8_t payload_length;
313  uint8_t payload[ 256 ];
315 
320 typedef struct
321 {
322  uint8_t message_type;
323  uint8_t pck_bound_flag;
324  uint8_t conn_ident;
325  uint8_t payload_length;
326  uint8_t payload[ 256 ];
327 } data_packet_t;
328 
333 typedef enum
334 {
335  NFC2_OK = 0,
336  NFC2_ERROR = -1
337 
339 
356 
370 err_t nfc2_init ( nfc2_t *ctx, nfc2_cfg_t *cfg );
371 
383 void nfc2_default_cfg ( nfc2_t *ctx, control_packet_t *ctrl_pck );
384 
398 err_t nfc2_generic_write ( nfc2_t *ctx, uint8_t *p_tx_data, uint8_t n_bytes );
399 
413 err_t nfc2_generic_read ( nfc2_t *ctx, uint8_t *p_rx_h_data, uint8_t *p_rx_p_data );
414 
423 void nfc2_hw_reset( nfc2_t *ctx );
424 
434 uint8_t nfc2_get_data ( nfc2_t *ctx, uint8_t *p_rx_data );
435 
446 
457 
468 uint8_t nfc2_check_irq ( nfc2_t *ctx );
469 
479 
489 
498 
508 void nfc2_cmd_antenna_test ( nfc2_t *ctx, uint8_t sel_ant );
509 
519 
528 void nfc2_core_reset ( nfc2_t *ctx );
529 
538 void nfc2_init_core ( nfc2_t *ctx );
539 
549 
559 
569 
579 
589 void nfc2_cmd_authenticate_sector ( nfc2_t *ctx, uint8_t sel_sect_addr );
590 
600 
601 #ifdef __cplusplus
602 }
603 #endif
604 #endif // NFC2_H
605  // nfc2
607 
608 // ------------------------------------------------------------------------ END
nfc2_generic_write
err_t nfc2_generic_write(nfc2_t *ctx, uint8_t *p_tx_data, uint8_t n_bytes)
NFC 2 I2C writing function.
nfc2_cfg_t::sda
pin_name_t sda
Definition: nfc2.h:292
nfc2_cfg_setup
void nfc2_cfg_setup(nfc2_cfg_t *cfg)
NFC 2 configuration object setup function.
nfc2_t::slave_address
uint8_t slave_address
Definition: nfc2.h:281
nfc2_cfg_t::i2c_address
uint8_t i2c_address
Definition: nfc2.h:298
nfc2_cmd_card_disconnected
void nfc2_cmd_card_disconnected(nfc2_t *ctx)
Card disconnected command function.
NFC2_ERROR
@ NFC2_ERROR
Definition: nfc2.h:336
nfc2_cfg_t
NFC 2 Click configuration object.
Definition: nfc2.h:290
nfc2_activate_rmt_mifare_card
void nfc2_activate_rmt_mifare_card(nfc2_t *ctx)
Activate remote mifare card command function.
nfc2_init
err_t nfc2_init(nfc2_t *ctx, nfc2_cfg_t *cfg)
NFC 2 initialization function.
nfc2_t::int_pin
digital_in_t int_pin
Definition: nfc2.h:275
control_packet_t::pck_bound_flag
uint8_t pck_bound_flag
Definition: nfc2.h:309
nfc2_cmd_core_init
void nfc2_cmd_core_init(nfc2_t *ctx)
Core init command function.
data_packet_t
NFC 2 Click data packet object.
Definition: nfc2.h:321
nfc2_cmd_test_procedure
void nfc2_cmd_test_procedure(nfc2_t *ctx)
NFC test procedure command function.
nfc2_t::i2c
i2c_master_t i2c
Definition: nfc2.h:278
data_packet_t::payload_length
uint8_t payload_length
Definition: nfc2.h:325
control_packet_t
NFC 2 Click control packet object.
Definition: nfc2.h:307
nfc2_get_data
uint8_t nfc2_get_data(nfc2_t *ctx, uint8_t *p_rx_data)
Get data function.
nfc2_write_ctrl_packet_data
void nfc2_write_ctrl_packet_data(nfc2_t *ctx, control_packet_t ctrl_pck)
Write control packet data function.
nfc2_cmd_core_reset
void nfc2_cmd_core_reset(nfc2_t *ctx)
Core reset command function.
nfc2_cfg_t::scl
pin_name_t scl
Definition: nfc2.h:291
nfc2_cmd_antenna_test
void nfc2_cmd_antenna_test(nfc2_t *ctx, uint8_t sel_ant)
Antenna test function.
NFC2_OK
@ NFC2_OK
Definition: nfc2.h:335
nfc2_cfg_t::rst
pin_name_t rst
Definition: nfc2.h:294
data_packet_t::message_type
uint8_t message_type
Definition: nfc2.h:322
nfc2_t
NFC 2 Click context object.
Definition: nfc2.h:270
data_packet_t::conn_ident
uint8_t conn_ident
Definition: nfc2.h:324
control_packet_t::opcode_ident
uint8_t opcode_ident
Definition: nfc2.h:311
nfc2_check_irq
uint8_t nfc2_check_irq(nfc2_t *ctx)
Check IRQ ststus function.
nfc2_core_set_default_config
void nfc2_core_set_default_config(nfc2_t *ctx)
Set default configuration function.
data_packet_t::pck_bound_flag
uint8_t pck_bound_flag
Definition: nfc2.h:323
nfc2_core_reset
void nfc2_core_reset(nfc2_t *ctx)
Core reset command function.
nfc2_generic_read
err_t nfc2_generic_read(nfc2_t *ctx, uint8_t *p_rx_h_data, uint8_t *p_rx_p_data)
NFC 2 I2C reading function.
nfc2_t::rst
digital_out_t rst
Definition: nfc2.h:272
nfc2_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: nfc2.h:297
nfc2_default_cfg
void nfc2_default_cfg(nfc2_t *ctx, control_packet_t *ctrl_pck)
NFC 2 default configuration function.
nfc2_init_core
void nfc2_init_core(nfc2_t *ctx)
Core initialization command function.
control_packet_t::message_type
uint8_t message_type
Definition: nfc2.h:308
nfc2_cfg_t::int_pin
pin_name_t int_pin
Definition: nfc2.h:295
control_packet_t::payload_length
uint8_t payload_length
Definition: nfc2.h:312
nfc2_cmd_disable_standby_mode
void nfc2_cmd_disable_standby_mode(nfc2_t *ctx)
Disable standby mode command function.
nfc2_cmd_start_discovery
void nfc2_cmd_start_discovery(nfc2_t *ctx)
Start discovery command function.
nfc2_cmd_authenticate_sector
void nfc2_cmd_authenticate_sector(nfc2_t *ctx, uint8_t sel_sect_addr)
Authenticate sector command function.
nfc2_core_set_protocol_config
void nfc2_core_set_protocol_config(nfc2_t *ctx)
Set protocol configuration function.
nfc2_return_value_t
nfc2_return_value_t
NFC 2 Click return value data.
Definition: nfc2.h:334
nfc2_read_ctrl_packet_data
void nfc2_read_ctrl_packet_data(nfc2_t *ctx, control_packet_t *ctrl_pck)
Read control packet data function.
nfc2_hw_reset
void nfc2_hw_reset(nfc2_t *ctx)
HW reset function.
control_packet_t::group_ident
uint8_t group_ident
Definition: nfc2.h:310