1
0
mirror of https://github.com/whowechina/aic_pico.git synced 2024-12-01 00:17:16 +01:00

detect_card_ex to ignore card types

This commit is contained in:
whowechina 2024-04-23 10:49:30 +08:00
parent a287702735
commit 8c74095e42
2 changed files with 80 additions and 63 deletions

View File

@ -1,59 +1,61 @@
/* /*
* NFC Operations * NFC Operations
* WHowe <github.com/whowechina> * WHowe <github.com/whowechina>
* *
*/ */
#ifndef NFC_H #ifndef NFC_H
#define NFC_H #define NFC_H
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>
#include "hardware/i2c.h" #include "hardware/i2c.h"
#include "hardware/spi.h" #include "hardware/spi.h"
typedef enum { typedef enum {
NFC_CARD_NONE = 0, NFC_CARD_NONE = 0,
NFC_CARD_MIFARE, NFC_CARD_MIFARE,
NFC_CARD_FELICA, NFC_CARD_FELICA,
NFC_CARD_VICINITY, NFC_CARD_VICINITY,
} nfc_card_type; } nfc_card_type;
const char *nfc_card_name(nfc_card_type card_type); const char *nfc_card_name(nfc_card_type card_type);
typedef void (*nfc_wait_loop_t)(); typedef void (*nfc_wait_loop_t)();
typedef struct { typedef struct {
nfc_card_type card_type; nfc_card_type card_type;
uint16_t len; uint16_t len;
union { union {
uint8_t uid[8]; uint8_t uid[8];
uint8_t idm[8]; uint8_t idm[8];
}; };
uint8_t pmm[8]; uint8_t pmm[8];
uint8_t syscode[2]; uint8_t syscode[2];
} nfc_card_t; } nfc_card_t;
/* should init or attach i2c and spi port before init */ /* should init or attach i2c and spi port before init */
void nfc_attach_i2c(i2c_inst_t *port); void nfc_attach_i2c(i2c_inst_t *port);
void nfc_attach_spi(spi_inst_t *port, uint8_t rst, uint8_t nss, uint8_t busy); void nfc_attach_spi(spi_inst_t *port, uint8_t rst, uint8_t nss, uint8_t busy);
void nfc_init_i2c(i2c_inst_t *port, uint8_t scl, uint8_t sda, uint32_t freq); void nfc_init_i2c(i2c_inst_t *port, uint8_t scl, uint8_t sda, uint32_t freq);
void nfc_init_spi(spi_inst_t *port, uint8_t miso, uint8_t sck, uint8_t mosi, void nfc_init_spi(spi_inst_t *port, uint8_t miso, uint8_t sck, uint8_t mosi,
uint8_t rst, uint8_t nss, uint8_t busy); uint8_t rst, uint8_t nss, uint8_t busy);
void nfc_init(); void nfc_init();
/* should be called only after init */ /* should be called only after init */
void nfc_set_wait_loop(nfc_wait_loop_t loop); void nfc_set_wait_loop(nfc_wait_loop_t loop);
void nfc_rf_field(bool on); void nfc_rf_field(bool on);
nfc_card_t nfc_detect_card(); nfc_card_t nfc_detect_card();
void display_card(const nfc_card_t *card); nfc_card_t nfc_detect_card_ex(bool mifare, bool felica, bool vicinity);
const char *nfc_module_name(); void display_card(const nfc_card_t *card);
bool nfc_mifare_auth(const uint8_t uid[4], uint8_t block_id, uint8_t key_id, const uint8_t *key); const char *nfc_module_name();
bool nfc_mifare_read(uint8_t block_id, uint8_t block_data[16]);
bool nfc_mifare_auth(const uint8_t uid[4], uint8_t block_id, uint8_t key_id, const uint8_t *key);
#endif bool nfc_mifare_read(uint8_t block_id, uint8_t block_data[16]);
#endif

View File

@ -199,12 +199,27 @@ nfc_card_t nfc_detect_card()
{ {
nfc_card_t card = { 0 }; nfc_card_t card = { 0 };
if (!nfc_detect_mifare(&card) && if (nfc_detect_mifare(&card) ||
!nfc_detect_felica(&card) && nfc_detect_felica(&card) ||
!nfc_detect_vicinity(&card)) { nfc_detect_vicinity(&card)) {
card.card_type = NFC_CARD_NONE; return card;
} }
card.card_type = NFC_CARD_NONE;
return card;
}
nfc_card_t nfc_detect_card_ex(bool mifare, bool felica, bool vicinity)
{
nfc_card_t card = { 0 };
if ((mifare && nfc_detect_mifare(&card))
|| (felica && nfc_detect_felica(&card))
|| (vicinity && nfc_detect_vicinity(&card))) {
return card;
}
card.card_type = NFC_CARD_NONE;
return card; return card;
} }