Files
rpi_pico_mfrc522/main.c

77 lines
2.6 KiB
C

#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include "driver_mfrc522_interface.h"
#define MFRC522_CFG_IRQ_GPIO 14
static mfrc522_handle_t ctx = {0};
static void mfrc522_integration_irq_handler(uint gpio, uint32_t event_mask)
{
(void) gpio;
(void) event_mask;
// Dump return value for now, we cannot do anything at the moment.
(void) mfrc522_irq_handler(&ctx);
}
static void mfrc522_integration_irq_init(void)
{
gpio_set_irq_enabled_with_callback(MFRC522_CFG_IRQ_GPIO, GPIO_IRQ_EDGE_RISE, true,
mfrc522_integration_irq_handler);
}
void mfrc522_integration_init(void)
{
DRIVER_MFRC522_LINK_INIT(&ctx, mfrc522_handle_t);
DRIVER_MFRC522_LINK_RESET_GPIO_INIT(&ctx, mfrc522_interface_reset_gpio_init);
DRIVER_MFRC522_LINK_RESET_GPIO_DEINIT(&ctx, mfrc522_interface_reset_gpio_deinit);
DRIVER_MFRC522_LINK_RESET_GPIO_WRITE(&ctx, mfrc522_interface_reset_gpio_write);
DRIVER_MFRC522_LINK_IIC_INIT(&ctx, mfrc522_interface_iic_init);
DRIVER_MFRC522_LINK_IIC_DEINIT(&ctx, mfrc522_interface_iic_deinit);
DRIVER_MFRC522_LINK_IIC_WRITE(&ctx, mfrc522_interface_iic_write);
DRIVER_MFRC522_LINK_IIC_READ(&ctx, mfrc522_interface_iic_read);
DRIVER_MFRC522_LINK_UART_INIT(&ctx, mfrc522_interface_uart_init);
DRIVER_MFRC522_LINK_UART_DEINIT(&ctx, mfrc522_interface_uart_deinit);
DRIVER_MFRC522_LINK_UART_READ(&ctx, mfrc522_interface_uart_read);
DRIVER_MFRC522_LINK_UART_WRITE(&ctx, mfrc522_interface_uart_write);
DRIVER_MFRC522_LINK_UART_FLUSH(&ctx, mfrc522_interface_uart_flush);
DRIVER_MFRC522_LINK_SPI_INIT(&ctx, mfrc522_interface_spi_init);
DRIVER_MFRC522_LINK_SPI_DEINIT(&ctx, mfrc522_interface_spi_deinit);
DRIVER_MFRC522_LINK_SPI_READ(&ctx, mfrc522_interface_spi_read);
DRIVER_MFRC522_LINK_SPI_WRITE(&ctx, mfrc522_interface_spi_write);
DRIVER_MFRC522_LINK_DELAY_MS(&ctx, mfrc522_interface_delay_ms);
DRIVER_MFRC522_LINK_DEBUG_PRINT(&ctx, mfrc522_interface_debug_print);
DRIVER_MFRC522_LINK_RECEIVE_CALLBACK(&ctx, mfrc522_interface_receive_callback);
mfrc522_set_interface(&ctx, MFRC522_INTERFACE_SPI);
uint8_t init_retval = mfrc522_init(&ctx);
if (init_retval == 0) {
mfrc522_integration_irq_init();
} else {
printf("ERR: %s failed: %d\n", __FUNCTION__, init_retval);
}
}
int main(void)
{
stdio_init_all();
sleep_ms(2500);
printf("Hello World!\n");
mfrc522_integration_init();
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(250);
gpio_put(LED_PIN, 0);
sleep_ms(250);
}
}