Files
pm3-lvgl/src/nfc.c
Edith Boles 371f458d9a Add tap demo
2026-03-16 01:58:49 -07:00

69 lines
1.7 KiB
C

#include "cvend.h"
#include <stdint.h>
#include <unistd.h>
#include <pthread.h>
#include "nfc.h"
void nfc_init(const char *path)
{
uint8_t desfire_enable[] = { 0x00, CTYPE_DESFIRE, 0x01, FUNC_ENABLE };
cvend_init(path);
cvend_write(MTYPE_PROX_CARD_FUNCTION, desfire_enable, 4);
}
void *nfc_heartbeat(void *data)
{
uint8_t heartbeat[2] = { 0x00, 0x00 };
while (1) {
cvend_write(MTYPE_STATUS, heartbeat, 2);
sleep(10);
}
return NULL;
}
void *nfc_handle(void *data)
{
pthread_t heartbeat_thread;
pthread_create(&heartbeat_thread, NULL, nfc_heartbeat, NULL);
nfc_cb callback = data;
uint8_t desfire_select_application[] = { 0x5a, 0xF2, 0x10, 0xE0 };
// uint8_t desfire_fid_list[] = { 0xf5, 0x00 };
uint8_t desfire_get_version[] = { 0x60 };
uint8_t desfire_read[] = { 0xbd, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 };
while (1) {
cvend_packet *packet = cvend_read();
if (packet->msg_type != MTYPE_DESFIRE_READ) {
cvend_free(packet);
continue;
}
cvend_free(packet);
cvend_write(MTYPE_DESFIRE_COMMAND,
desfire_select_application, 4);
cvend_free(cvend_read_type(MTYPE_DESFIRE_COMMAND_REPLY));
cvend_write(MTYPE_DESFIRE_COMMAND, desfire_get_version,
1);
cvend_packet *resp_version =
cvend_read_type(MTYPE_DESFIRE_COMMAND_REPLY);
if (resp_version->msg_len == 2 && resp_version->msg_data[1] == 0x6e) {
cvend_free(resp_version);
continue;
}
cvend_write(MTYPE_DESFIRE_COMMAND, desfire_read, 8);
cvend_packet *resp_data =
cvend_read_type(MTYPE_DESFIRE_COMMAND_REPLY);
callback(resp_data->msg_data[0], resp_version->msg_data,
resp_version->msg_len, resp_data->msg_data,
resp_version->msg_len);
cvend_free(resp_version);
cvend_free(resp_data);
}
return NULL;
}