magicrfid  2.0.0.0
magicrfid.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 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 MAGICRFID_H
29 #define MAGICRFID_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_uart.h"
48 
69 #define MAGICRFID_OPCODE_VERSION 0x03
70 #define MAGICRFID_OPCODE_SET_BAUD_RATE 0x06
71 #define MAGICRFID_OPCODE_READ_TAG_ID_SINGLE 0x21
72 #define MAGICRFID_OPCODE_READ_TAG_ID_MULTIPLE 0x22
73 #define MAGICRFID_OPCODE_WRITE_TAG_ID 0x23
74 #define MAGICRFID_OPCODE_WRITE_TAG_DATA 0x24
75 #define MAGICRFID_OPCODE_KILL_TAG 0x26
76 #define MAGICRFID_OPCODE_READ_TAG_DATA 0x28
77 #define MAGICRFID_OPCODE_CLEAR_TAG_ID_BUFFER 0x2A
78 #define MAGICRFID_OPCODE_MULTI_PROTOCOL_TAG_OP 0x2F
79 #define MAGICRFID_OPCODE_GET_READ_TX_POWER 0x62
80 #define MAGICRFID_OPCODE_GET_WRITE_TX_POWER 0x64
81 #define MAGICRFID_OPCODE_GET_POWER_MODE 0x68
82 #define MAGICRFID_OPCODE_GET_READER_OPTIONAL_PARAMS 0x6A
83 #define MAGICRFID_OPCODE_GET_PROTOCOL_PARAM 0x6B
84 #define MAGICRFID_OPCODE_SET_ANTENNA_PORT 0x91
85 #define MAGICRFID_OPCODE_SET_TAG_PROTOCOL 0x93
86 #define MAGICRFID_OPCODE_SET_READ_TX_POWER 0x92
87 #define MAGICRFID_OPCODE_SET_WRITE_TX_POWER 0x94
88 #define MAGICRFID_OPCODE_SET_REGION 0x97
89 #define MAGICRFID_OPCODE_SET_READER_OPTIONAL_PARAMS 0x9A
90 #define MAGICRFID_OPCODE_SET_PROTOCOL_PARAM 0x9B
91 
96 #define MAGICRFID_REGION_INDIA 0x04
97 #define MAGICRFID_REGION_JAPAN 0x05
98 #define MAGICRFID_REGION_CHINA 0x06
99 #define MAGICRFID_REGION_EUROPE 0x08
100 #define MAGICRFID_REGION_KOREA 0x09
101 #define MAGICRFID_REGION_AUSTRALIA 0x0B
102 #define MAGICRFID_REGION_NEWZEALAND 0x0C
103 #define MAGICRFID_REGION_NORTHAMERICA 0x0D
104 #define MAGICRFID_REGION_OPEN 0xFF
105 
110 #define MAGICRFID_TAG_PROTOCOL_NONE 0x00
111 #define MAGICRFID_TAG_PROTOCOL_ISO180006B 0x03
112 #define MAGICRFID_TAG_PROTOCOL_GEN2 0x05
113 #define MAGICRFID_TAG_PROTOCOL_ISO180006B_UCODE 0x06
114 #define MAGICRFID_TAG_PROTOCOL_IPX64 0x07
115 #define MAGICRFID_TAG_PROTOCOL_IPX256 0x08
116 #define MAGICRFID_TAG_PROTOCOL_ATA 0x1D
117 
122 #define MAGICRFID_NORMAL_DELAY_TIME 50
123 #define MAGICRFID_LONG_DELAY_TIME 100
124 #define MAGICRFID_TIMEOUT_MS 3000
125 
130 #define MAGICRFID_HEADER 0xFF
131 #define MAGICRFID_COMMAND_MAX_DATA_LEN 250
132 #define MAGICRFID_RESPONSE_MAX_DATA_LEN 248
133 #define MAGICRFID_EPC_MAX_DATA_LEN 16
134 
140 #define MAGICRFID_TX_DRV_BUFFER_SIZE 255
141 #define MAGICRFID_RX_DRV_BUFFER_SIZE 255
142  // magicrfid_cmd
144 
159 #define MAGICRFID_MAP_MIKROBUS( cfg, mikrobus ) \
160  cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
161  cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
162  cfg.en = MIKROBUS( mikrobus, MIKROBUS_CS )
163  // magicrfid_map // magicrfid
166 
171 typedef struct
172 {
173  // Output pins
174  digital_out_t en;
176  // Modules
177  uart_t uart;
179  // Buffers
180  uint8_t uart_rx_buffer[ MAGICRFID_RX_DRV_BUFFER_SIZE ];
181  uint8_t uart_tx_buffer[ MAGICRFID_TX_DRV_BUFFER_SIZE ];
183 } magicrfid_t;
184 
189 typedef struct
190 {
191  // Communication gpio pins
192  pin_name_t rx_pin;
193  pin_name_t tx_pin;
195  // Additional gpio pins
196  pin_name_t en;
198  // Static variable
199  uint32_t baud_rate;
201  uart_data_bits_t data_bit;
202  uart_parity_t parity_bit;
203  uart_stop_bits_t stop_bit;
206 
211 typedef struct
212 {
213  uint8_t data_len;
214  uint8_t opcode;
215  uint8_t data_buf[ MAGICRFID_COMMAND_MAX_DATA_LEN ];
216 
218 
223 typedef struct
224 {
225  uint8_t data_len;
226  uint8_t opcode;
227  uint16_t status;
228  uint8_t data_buf[ MAGICRFID_RESPONSE_MAX_DATA_LEN ];
229 
231 
236 typedef struct
237 {
238  uint8_t data_len;
239  uint16_t epc_pc;
240  uint8_t data_buf[ MAGICRFID_EPC_MAX_DATA_LEN ];
241  uint16_t epc_crc;
242 
244 
249 typedef enum
250 {
252  MAGICRFID_ERROR = -1
253 
255 
272 
287 
299 
311 err_t magicrfid_generic_write ( magicrfid_t *ctx, uint8_t *data_buf, uint16_t len );
312 
324 err_t magicrfid_generic_read ( magicrfid_t *ctx, uint8_t *data_buf, uint16_t max_len );
325 
334 
345 
358 
367 
376 
387 
397 void magicrfid_set_tag_protocol ( magicrfid_t *ctx, uint8_t protocol );
398 
408 void magicrfid_set_region ( magicrfid_t *ctx, uint8_t region );
409 
419 
429 void magicrfid_set_baud_rate ( magicrfid_t *ctx, uint32_t baud_rate );
430 
440 void magicrfid_set_read_power ( magicrfid_t *ctx, uint16_t power_setting );
441 
451 void magicrfid_set_write_power ( magicrfid_t *ctx, uint16_t power_setting );
452 
461 void magicrfid_set_reader_config ( magicrfid_t *ctx, uint8_t option1, uint8_t option2 );
462 
472 
481 
482 #ifdef __cplusplus
483 }
484 #endif
485 #endif // MAGICRFID_H
486  // magicrfid
488 
489 // ------------------------------------------------------------------------ END
magicrfid_return_value_t
magicrfid_return_value_t
Magic RFID Click return value data.
Definition: magicrfid.h:250
magicrfid_response_t::status
uint16_t status
Definition: magicrfid.h:227
magicrfid_command_t::opcode
uint8_t opcode
Definition: magicrfid.h:214
magicrfid_init
err_t magicrfid_init(magicrfid_t *ctx, magicrfid_cfg_t *cfg)
Magic RFID initialization function.
magicrfid_command_t::data_len
uint8_t data_len
Definition: magicrfid.h:213
MAGICRFID_EPC_MAX_DATA_LEN
#define MAGICRFID_EPC_MAX_DATA_LEN
Definition: magicrfid.h:133
magicrfid_send_command
void magicrfid_send_command(magicrfid_t *ctx, magicrfid_command_t cmd)
Magic RFID send command function.
magicrfid_set_read_power
void magicrfid_set_read_power(magicrfid_t *ctx, uint16_t power_setting)
Magic RFID set read function power.
magicrfid_default_cfg
void magicrfid_default_cfg(magicrfid_t *ctx)
Magic RFID default configuration function.
magicrfid_command_t
Magic RFID Click command object.
Definition: magicrfid.h:212
MAGICRFID_ERROR
@ MAGICRFID_ERROR
Definition: magicrfid.h:252
magicrfid_generic_read
err_t magicrfid_generic_read(magicrfid_t *ctx, uint8_t *data_buf, uint16_t max_len)
Magic RFID data reading function.
magicrfid_set_write_power
void magicrfid_set_write_power(magicrfid_t *ctx, uint16_t power_setting)
Magic RFID set write function power.
magicrfid_t::en
digital_out_t en
Definition: magicrfid.h:174
magicrfid_response_t::opcode
uint8_t opcode
Definition: magicrfid.h:226
MAGICRFID_OK
@ MAGICRFID_OK
Definition: magicrfid.h:251
magicrfid_cfg_t::stop_bit
uart_stop_bits_t stop_bit
Definition: magicrfid.h:203
magicrfid_cfg_t::en
pin_name_t en
Definition: magicrfid.h:196
magicrfid_set_reader_config
void magicrfid_set_reader_config(magicrfid_t *ctx, uint8_t option1, uint8_t option2)
Magic RFID set reader configuration function.
magicrfid_epc_t::epc_crc
uint16_t epc_crc
Definition: magicrfid.h:241
magicrfid_parse_tag_rssi
int8_t magicrfid_parse_tag_rssi(magicrfid_response_t rsp)
Parse Tag RSSI value.
magicrfid_set_tag_protocol
void magicrfid_set_tag_protocol(magicrfid_t *ctx, uint8_t protocol)
Magic RFID set protocol function.
magicrfid_set_baud_rate
void magicrfid_set_baud_rate(magicrfid_t *ctx, uint32_t baud_rate)
Magic RFID set baud rate function.
MAGICRFID_RESPONSE_MAX_DATA_LEN
#define MAGICRFID_RESPONSE_MAX_DATA_LEN
Definition: magicrfid.h:132
magicrfid_cfg_t::data_bit
uart_data_bits_t data_bit
Definition: magicrfid.h:201
magicrfid_t
Magic RFID Click context object.
Definition: magicrfid.h:172
MAGICRFID_COMMAND_MAX_DATA_LEN
#define MAGICRFID_COMMAND_MAX_DATA_LEN
Definition: magicrfid.h:131
magicrfid_start_reading
void magicrfid_start_reading(magicrfid_t *ctx)
Magic RFID enable reading function.
magicrfid_response_t::data_len
uint8_t data_len
Definition: magicrfid.h:225
MAGICRFID_TX_DRV_BUFFER_SIZE
#define MAGICRFID_TX_DRV_BUFFER_SIZE
Magic RFID driver buffer size.
Definition: magicrfid.h:140
magicrfid_t::uart
uart_t uart
Definition: magicrfid.h:177
magicrfid_generic_write
err_t magicrfid_generic_write(magicrfid_t *ctx, uint8_t *data_buf, uint16_t len)
Magic RFID data writing function.
magicrfid_epc_t::epc_pc
uint16_t epc_pc
Definition: magicrfid.h:239
magicrfid_device_reset
void magicrfid_device_reset(magicrfid_t *ctx)
Magic RFID device reset function.
magicrfid_cfg_t::baud_rate
uint32_t baud_rate
Definition: magicrfid.h:199
magicrfid_cfg_t::parity_bit
uart_parity_t parity_bit
Definition: magicrfid.h:202
magicrfid_cfg_t::rx_pin
pin_name_t rx_pin
Definition: magicrfid.h:192
magicrfid_parse_tag_freq
uint32_t magicrfid_parse_tag_freq(magicrfid_response_t rsp)
Parse Tag Freq value.
magicrfid_cfg_setup
void magicrfid_cfg_setup(magicrfid_cfg_t *cfg)
Magic RFID configuration object setup function.
magicrfid_cfg_t
Magic RFID Click configuration object.
Definition: magicrfid.h:190
magicrfid_parse_tag_epc
void magicrfid_parse_tag_epc(magicrfid_response_t rsp, magicrfid_epc_t *epc)
Parse Tag EPC bytes.
magicrfid_epc_t
Magic RFID Click EPC data object.
Definition: magicrfid.h:237
magicrfid_get_response
err_t magicrfid_get_response(magicrfid_t *ctx, magicrfid_response_t *rsp)
Magic RFID get response function.
magicrfid_set_region
void magicrfid_set_region(magicrfid_t *ctx, uint8_t region)
Magic RFID set region function.
magicrfid_set_antenna_port
void magicrfid_set_antenna_port(magicrfid_t *ctx)
Magic RFID turn on antenna port function.
MAGICRFID_RX_DRV_BUFFER_SIZE
#define MAGICRFID_RX_DRV_BUFFER_SIZE
Definition: magicrfid.h:141
magicrfid_cfg_t::uart_blocking
bool uart_blocking
Definition: magicrfid.h:200
magicrfid_response_t
Magic RFID Click response object.
Definition: magicrfid.h:224
magicrfid_cfg_t::tx_pin
pin_name_t tx_pin
Definition: magicrfid.h:193
magicrfid_clear_buffers
void magicrfid_clear_buffers(magicrfid_t *ctx)
Magic RFID clear buffers function.
magicrfid_epc_t::data_len
uint8_t data_len
Definition: magicrfid.h:238