mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-24 05:23:06 +00:00
5769595e67
* digital_signal: optimize calculationxx * firmware: add listen start and listen rx * digital signal: rework with fixed point calculation * nfc: tune timings * nfc: fix array overflow * mifare classic: fix key access * nfc: rework spi bus access * nfc: rework listen mode with st25r3916 calls * digital signal: speed up digital_signal_append() * digital signal: remove unused profiling * nfc: clean up code * nfc: correct sleep state * nfc: add unit tests * nfc: fix memory leak in unit test * digital_signal: remove unused code * nfc: fix incorrect sak load in pt memory Co-authored-by: あく <alleteam@gmail.com>
190 lines
8.8 KiB
C
190 lines
8.8 KiB
C
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <stdbool.h>
|
|
#include <limits.h>
|
|
#include <cmsis_os2.h>
|
|
#include "timer.h"
|
|
#include "math.h"
|
|
#include <furi_hal_gpio.h>
|
|
#include <furi_hal_light.h>
|
|
#include <furi_hal_spi.h>
|
|
|
|
typedef void (*PlatformIrqCallback)();
|
|
void platformSetIrqCallback(PlatformIrqCallback cb);
|
|
void platformEnableIrqCallback();
|
|
void platformDisableIrqCallback();
|
|
|
|
bool platformSpiTxRx(const uint8_t* txBuf, uint8_t* rxBuf, uint16_t len);
|
|
void platformProtectST25RComm();
|
|
void platformUnprotectST25RComm();
|
|
void rfal_platform_spi_acquire();
|
|
void rfal_platform_spi_release();
|
|
|
|
#define ST25R_SS_PIN NFC_CS_Pin
|
|
#define ST25R_SS_PORT NFC_CS_GPIO_Port
|
|
|
|
#define ST25R_INT_PIN NFC_IRQ_Pin
|
|
#define ST25R_INT_PORT NFC_IRQ_GPIO_Port
|
|
|
|
#define RFAL_ANALOG_CONFIG_CUSTOM \
|
|
true /*!< Enable/Disable RFAL custom analog configuration */
|
|
|
|
#define RFAL_FEATURE_LISTEN_MODE \
|
|
true /*!< Enable/Disable RFAL support for Listen Mode */
|
|
#define RFAL_FEATURE_WAKEUP_MODE \
|
|
true /*!< Enable/Disable RFAL support for the Wake-Up mode */
|
|
#define RFAL_FEATURE_LOWPOWER_MODE \
|
|
true /*!< Enable/Disable RFAL support for the Low Power mode */
|
|
#define RFAL_FEATURE_NFCA \
|
|
true /*!< Enable/Disable RFAL support for NFC-A (ISO14443A) */
|
|
#define RFAL_FEATURE_NFCB \
|
|
true /*!< Enable/Disable RFAL support for NFC-B (ISO14443B) */
|
|
#define RFAL_FEATURE_NFCF \
|
|
true /*!< Enable/Disable RFAL support for NFC-F (FeliCa) */
|
|
#define RFAL_FEATURE_NFCV \
|
|
true /*!< Enable/Disable RFAL support for NFC-V (ISO15693) */
|
|
#define RFAL_FEATURE_T1T \
|
|
true /*!< Enable/Disable RFAL support for T1T (Topaz) */
|
|
#define RFAL_FEATURE_T2T \
|
|
true /*!< Enable/Disable RFAL support for T2T (MIFARE Ultralight) */
|
|
#define RFAL_FEATURE_T4T \
|
|
true /*!< Enable/Disable RFAL support for T4T */
|
|
#define RFAL_FEATURE_ST25TB \
|
|
true /*!< Enable/Disable RFAL support for ST25TB */
|
|
#define RFAL_FEATURE_ST25xV \
|
|
true /*!< Enable/Disable RFAL support for ST25TV/ST25DV */
|
|
#define RFAL_FEATURE_DYNAMIC_ANALOG_CONFIG \
|
|
false /*!< Enable/Disable Analog Configs to be dynamically updated (RAM) */
|
|
#define RFAL_FEATURE_DPO \
|
|
false /*!< Enable/Disable RFAL Dynamic Power Output upport */
|
|
#define RFAL_FEATURE_ISO_DEP \
|
|
true /*!< Enable/Disable RFAL support for ISO-DEP (ISO14443-4) */
|
|
#define RFAL_FEATURE_ISO_DEP_POLL \
|
|
true /*!< Enable/Disable RFAL support for Poller mode (PCD) ISO-DEP (ISO14443-4) */
|
|
#define RFAL_FEATURE_ISO_DEP_LISTEN \
|
|
true /*!< Enable/Disable RFAL support for Listen mode (PICC) ISO-DEP (ISO14443-4) */
|
|
#define RFAL_FEATURE_NFC_DEP \
|
|
true /*!< Enable/Disable RFAL support for NFC-DEP (NFCIP1/P2P) */
|
|
|
|
#define RFAL_FEATURE_ISO_DEP_IBLOCK_MAX_LEN \
|
|
256U /*!< ISO-DEP I-Block max length. Please use values as defined by rfalIsoDepFSx */
|
|
#define RFAL_FEATURE_NFC_DEP_BLOCK_MAX_LEN \
|
|
254U /*!< NFC-DEP Block/Payload length. Allowed values: 64, 128, 192, 254 */
|
|
#define RFAL_FEATURE_NFC_RF_BUF_LEN \
|
|
256U /*!< RF buffer length used by RFAL NFC layer */
|
|
|
|
#define RFAL_FEATURE_ISO_DEP_APDU_MAX_LEN \
|
|
512U /*!< ISO-DEP APDU max length. */
|
|
#define RFAL_FEATURE_NFC_DEP_PDU_MAX_LEN \
|
|
512U /*!< NFC-DEP PDU max length. */
|
|
|
|
#define platformIrqST25RSetCallback(cb) platformSetIrqCallback(cb)
|
|
|
|
#define platformProtectST25RIrqStatus() \
|
|
platformProtectST25RComm() /*!< Protect unique access to IRQ status var - IRQ disable on single thread environment (MCU) ; Mutex lock on a multi thread environment */
|
|
#define platformUnprotectST25RIrqStatus() \
|
|
platformUnprotectST25RComm() /*!< Unprotect the IRQ status var - IRQ enable on a single thread environment (MCU) ; Mutex unlock on a multi thread environment */
|
|
|
|
#define platformGpioSet(port, pin) \
|
|
furi_hal_gpio_write_port_pin( \
|
|
port, pin, true) /*!< Turns the given GPIO High */
|
|
#define platformGpioClear(port, pin) \
|
|
furi_hal_gpio_write_port_pin( \
|
|
port, pin, false) /*!< Turns the given GPIO Low */
|
|
|
|
#define platformGpioIsHigh(port, pin) \
|
|
(furi_hal_gpio_read_port_pin(port, pin) == \
|
|
true) /*!< Checks if the given LED is High */
|
|
#define platformGpioIsLow(port, pin) \
|
|
(!platformGpioIsHigh(port, pin)) /*!< Checks if the given LED is Low */
|
|
|
|
#define platformTimerCreate(t) \
|
|
timerCalculateTimer(t) /*!< Create a timer with the given time (ms) */
|
|
#define platformTimerIsExpired(timer) \
|
|
timerIsExpired(timer) /*!< Checks if the given timer is expired */
|
|
#define platformDelay(t) osDelay(t) /*!< Performs a delay for the given time (ms) */
|
|
|
|
#define platformGetSysTick() \
|
|
osKernelGetTickCount() /*!< Get System Tick (1 tick = 1 ms) */
|
|
|
|
#define platformAssert(exp) assert_param(exp) /*!< Asserts whether the given expression is true*/
|
|
|
|
#define platformSpiSelect() \
|
|
platformGpioClear( \
|
|
ST25R_SS_PORT, ST25R_SS_PIN) /*!< SPI SS\CS: Chip|Slave Select */
|
|
#define platformSpiDeselect() \
|
|
platformGpioSet( \
|
|
ST25R_SS_PORT, ST25R_SS_PIN) /*!< SPI SS\CS: Chip|Slave Deselect */
|
|
|
|
#define platformI2CTx(txBuf, len, last, txOnly) /*!< I2C Transmit */
|
|
#define platformI2CRx(txBuf, len) /*!< I2C Receive */
|
|
#define platformI2CStart() /*!< I2C Start condition */
|
|
#define platformI2CStop() /*!< I2C Stop condition */
|
|
#define platformI2CRepeatStart() /*!< I2C Repeat Start */
|
|
#define platformI2CSlaveAddrWR(add) /*!< I2C Slave address for Write operation */
|
|
#define platformI2CSlaveAddrRD(add) /*!< I2C Slave address for Read operation */
|
|
|
|
#define platformLog(...) /*!< Log method */
|
|
|
|
/*
|
|
******************************************************************************
|
|
* RFAL OPTIONAL MACROS (Do not change)
|
|
******************************************************************************
|
|
*/
|
|
#ifndef platformProtectST25RIrqStatus
|
|
#define platformProtectST25RIrqStatus() /*!< Protect unique access to IRQ status var - IRQ disable on single thread environment (MCU) ; Mutex lock on a multi thread environment */
|
|
#endif /* platformProtectST25RIrqStatus */
|
|
|
|
#ifndef platformUnprotectST25RIrqStatus
|
|
#define platformUnprotectST25RIrqStatus() /*!< Unprotect the IRQ status var - IRQ enable on a single thread environment (MCU) ; Mutex unlock on a multi thread environment */
|
|
#endif /* platformUnprotectST25RIrqStatus */
|
|
|
|
#ifndef platformProtectWorker
|
|
#define platformProtectWorker() /* Protect RFAL Worker/Task/Process from concurrent execution on multi thread platforms */
|
|
#endif /* platformProtectWorker */
|
|
|
|
#ifndef platformUnprotectWorker
|
|
#define platformUnprotectWorker() /* Unprotect RFAL Worker/Task/Process from concurrent execution on multi thread platforms */
|
|
#endif /* platformUnprotectWorker */
|
|
|
|
#ifndef platformIrqST25RPinInitialize
|
|
#define platformIrqST25RPinInitialize() /*!< Initializes ST25R IRQ pin */
|
|
#endif /* platformIrqST25RPinInitialize */
|
|
|
|
#ifndef platformIrqST25RSetCallback
|
|
#define platformIrqST25RSetCallback(cb) /*!< Sets ST25R ISR callback */
|
|
#endif /* platformIrqST25RSetCallback */
|
|
|
|
#ifndef platformLedsInitialize
|
|
#define platformLedsInitialize() /*!< Initializes the pins used as LEDs to outputs */
|
|
#endif /* platformLedsInitialize */
|
|
|
|
#ifndef platformLedOff
|
|
#define platformLedOff(port, pin) /*!< Turns the given LED Off */
|
|
#endif /* platformLedOff */
|
|
|
|
#ifndef platformLedOn
|
|
#define platformLedOn(port, pin) /*!< Turns the given LED On */
|
|
#endif /* platformLedOn */
|
|
|
|
#ifndef platformLedToogle
|
|
#define platformLedToogle(port, pin) /*!< Toggles the given LED */
|
|
#endif /* platformLedToogle */
|
|
|
|
#ifndef platformGetSysTick
|
|
#define platformGetSysTick() /*!< Get System Tick (1 tick = 1 ms) */
|
|
#endif /* platformGetSysTick */
|
|
|
|
#ifndef platformTimerDestroy
|
|
#define platformTimerDestroy(timer) /*!< Stops and released the given timer */
|
|
#endif /* platformTimerDestroy */
|
|
|
|
#ifndef platformAssert
|
|
#define platformAssert(exp) /*!< Asserts whether the given expression is true */
|
|
#endif /* platformAssert */
|
|
|
|
#ifndef platformErrorHandle
|
|
#define platformErrorHandle() /*!< Global error handler or trap */
|
|
#endif /* platformErrorHandle */
|