mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-12-22 21:01:40 +03:00
merge ofw pr 3885 - Add API to enforce ISO15693 mode [ci skip]
by aaronjamt https://github.com/flipperdevices/flipperzero-firmware/pull/3885/files
This commit is contained in:
parent
0df33899eb
commit
16e4b9219a
@ -646,6 +646,33 @@ NfcError nfc_iso15693_listener_tx_sof(Nfc* instance) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
NfcError nfc_iso15693_detect_mode(Nfc* instance) {
|
||||
furi_check(instance);
|
||||
|
||||
FuriHalNfcError error = furi_hal_nfc_iso15693_detect_mode();
|
||||
NfcError ret = nfc_process_hal_error(error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
NfcError nfc_iso15693_force_1outof4(Nfc* instance) {
|
||||
furi_check(instance);
|
||||
|
||||
FuriHalNfcError error = furi_hal_nfc_iso15693_force_1outof4();
|
||||
NfcError ret = nfc_process_hal_error(error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
NfcError nfc_iso15693_force_1outof256(Nfc* instance) {
|
||||
furi_check(instance);
|
||||
|
||||
FuriHalNfcError error = furi_hal_nfc_iso15693_force_1outof256();
|
||||
NfcError ret = nfc_process_hal_error(error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
NfcError nfc_felica_listener_set_sensf_res_data(
|
||||
Nfc* instance,
|
||||
const uint8_t* idm,
|
||||
|
@ -380,6 +380,30 @@ NfcError nfc_felica_listener_set_sensf_res_data(
|
||||
*/
|
||||
NfcError nfc_iso15693_listener_tx_sof(Nfc* instance);
|
||||
|
||||
/**
|
||||
* @brief Set ISO15693 parser mode to autodetect
|
||||
*
|
||||
* @param[in,out] instance pointer to the instance to be configured.
|
||||
* @returns NfcErrorNone on success, any other error code on failure.
|
||||
*/
|
||||
NfcError nfc_iso15693_detect_mode(Nfc* instance);
|
||||
|
||||
/**
|
||||
* @brief Set ISO15693 parser mode to 1OutOf4, disables autodetection
|
||||
*
|
||||
* @param[in,out] instance pointer to the instance to be configured.
|
||||
* @return NfcErrorNone on success, any other error code on failure.
|
||||
*/
|
||||
NfcError nfc_iso15693_force_1outof4(Nfc* instance);
|
||||
|
||||
/**
|
||||
* @brief Set ISO15693 parser mode to 1OutOf256, disables autodetection
|
||||
*
|
||||
* @param[in,out] instance pointer to the instance to be configured.
|
||||
* @return NfcErrorNone on success, any other error code on failure.
|
||||
*/
|
||||
NfcError nfc_iso15693_force_1outof256(Nfc* instance);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -26,6 +26,7 @@ typedef enum {
|
||||
struct Iso15693Parser {
|
||||
Iso15693ParserState state;
|
||||
Iso15693ParserMode mode;
|
||||
bool detect_mode;
|
||||
|
||||
SignalReader* signal_reader;
|
||||
|
||||
@ -62,6 +63,7 @@ typedef Iso15693ParserCommand (*Iso15693ParserStateHandler)(Iso15693Parser* inst
|
||||
|
||||
Iso15693Parser* iso15693_parser_alloc(const GpioPin* pin, size_t max_frame_size) {
|
||||
Iso15693Parser* instance = malloc(sizeof(Iso15693Parser));
|
||||
instance->detect_mode = true;
|
||||
instance->parsed_frame = bit_buffer_alloc(max_frame_size);
|
||||
|
||||
instance->signal_reader = signal_reader_alloc(pin, ISO15693_PARSER_SIGNAL_READER_BUFF_SIZE);
|
||||
@ -86,7 +88,7 @@ void iso15693_parser_reset(Iso15693Parser* instance) {
|
||||
furi_assert(instance);
|
||||
|
||||
instance->state = Iso15693ParserStateParseSoF;
|
||||
instance->mode = Iso15693ParserMode1OutOf4;
|
||||
if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf4;
|
||||
memset(instance->bitstream_buff, 0x00, sizeof(instance->bitstream_buff));
|
||||
instance->bitstream_idx = 0;
|
||||
|
||||
@ -122,10 +124,10 @@ static void signal_reader_callback(SignalReaderEvent event, void* context) {
|
||||
|
||||
if(instance->state == Iso15693ParserStateParseSoF) {
|
||||
if(event.data->data[0] == sof_1_out_of_4) {
|
||||
instance->mode = Iso15693ParserMode1OutOf4;
|
||||
if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf4;
|
||||
instance->state = Iso15693ParserStateParseFrame;
|
||||
} else if(event.data->data[0] == sof_1_out_of_256) {
|
||||
instance->mode = Iso15693ParserMode1OutOf256;
|
||||
if(instance->detect_mode) instance->mode = Iso15693ParserMode1OutOf256;
|
||||
instance->state = Iso15693ParserStateParseFrame;
|
||||
} else if(event.data->data[0] == eof_single) {
|
||||
instance->eof_received = true;
|
||||
@ -298,3 +300,23 @@ void iso15693_parser_get_data(
|
||||
bit_buffer_write_bytes(instance->parsed_frame, buff, buff_size);
|
||||
*data_bits = bit_buffer_get_size(instance->parsed_frame);
|
||||
}
|
||||
|
||||
void iso15693_parser_detect_mode(Iso15693Parser* instance) {
|
||||
furi_assert(instance);
|
||||
|
||||
instance->detect_mode = true;
|
||||
}
|
||||
|
||||
void iso15693_parser_force_1outof4(Iso15693Parser* instance) {
|
||||
furi_assert(instance);
|
||||
|
||||
instance->detect_mode = false;
|
||||
instance->mode = Iso15693ParserMode1OutOf4;
|
||||
}
|
||||
|
||||
void iso15693_parser_force_1outof256(Iso15693Parser* instance) {
|
||||
furi_assert(instance);
|
||||
|
||||
instance->detect_mode = false;
|
||||
instance->mode = Iso15693ParserMode1OutOf256;
|
||||
}
|
@ -37,6 +37,10 @@ void iso15693_parser_get_data(
|
||||
size_t buff_size,
|
||||
size_t* data_bits);
|
||||
|
||||
void iso15693_parser_detect_mode(Iso15693Parser* instance);
|
||||
void iso15693_parser_force_1outof4(Iso15693Parser* instance);
|
||||
void iso15693_parser_force_1outof256(Iso15693Parser* instance);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -1489,6 +1489,9 @@ Function,+,furi_hal_nfc_iso14443a_poller_trx_short_frame,FuriHalNfcError,FuriHal
|
||||
Function,+,furi_hal_nfc_iso14443a_poller_tx_custom_parity,FuriHalNfcError,"const uint8_t*, size_t"
|
||||
Function,+,furi_hal_nfc_iso14443a_rx_sdd_frame,FuriHalNfcError,"uint8_t*, size_t, size_t*"
|
||||
Function,+,furi_hal_nfc_iso14443a_tx_sdd_frame,FuriHalNfcError,"const uint8_t*, size_t"
|
||||
Function,+,furi_hal_nfc_iso15693_detect_mode,FuriHalNfcError,
|
||||
Function,+,furi_hal_nfc_iso15693_force_1outof256,FuriHalNfcError,
|
||||
Function,+,furi_hal_nfc_iso15693_force_1outof4,FuriHalNfcError,
|
||||
Function,+,furi_hal_nfc_iso15693_listener_tx_sof,FuriHalNfcError,
|
||||
Function,+,furi_hal_nfc_listener_enable_rx,FuriHalNfcError,
|
||||
Function,+,furi_hal_nfc_listener_idle,FuriHalNfcError,
|
||||
@ -2831,6 +2834,9 @@ Function,+,nfc_iso14443a_listener_tx_custom_parity,NfcError,"Nfc*, const BitBuff
|
||||
Function,+,nfc_iso14443a_poller_trx_custom_parity,NfcError,"Nfc*, const BitBuffer*, BitBuffer*, uint32_t"
|
||||
Function,+,nfc_iso14443a_poller_trx_sdd_frame,NfcError,"Nfc*, const BitBuffer*, BitBuffer*, uint32_t"
|
||||
Function,+,nfc_iso14443a_poller_trx_short_frame,NfcError,"Nfc*, NfcIso14443aShortFrame, BitBuffer*, uint32_t"
|
||||
Function,+,nfc_iso15693_detect_mode,NfcError,Nfc*
|
||||
Function,+,nfc_iso15693_force_1outof256,NfcError,Nfc*
|
||||
Function,+,nfc_iso15693_force_1outof4,NfcError,Nfc*
|
||||
Function,+,nfc_iso15693_listener_tx_sof,NfcError,Nfc*
|
||||
Function,+,nfc_listener_alloc,NfcListener*,"Nfc*, NfcProtocol, const NfcDeviceData*"
|
||||
Function,+,nfc_listener_free,void,NfcListener*
|
||||
|
|
@ -406,6 +406,24 @@ FuriHalNfcError furi_hal_nfc_iso15693_listener_tx_sof(void) {
|
||||
return FuriHalNfcErrorNone;
|
||||
}
|
||||
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_detect_mode(void) {
|
||||
iso15693_parser_detect_mode(furi_hal_nfc_iso15693_listener->parser);
|
||||
|
||||
return FuriHalNfcErrorNone;
|
||||
}
|
||||
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_force_1outof4(void) {
|
||||
iso15693_parser_force_1outof4(furi_hal_nfc_iso15693_listener->parser);
|
||||
|
||||
return FuriHalNfcErrorNone;
|
||||
}
|
||||
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_force_1outof256(void) {
|
||||
iso15693_parser_force_1outof256(furi_hal_nfc_iso15693_listener->parser);
|
||||
|
||||
return FuriHalNfcErrorNone;
|
||||
}
|
||||
|
||||
static FuriHalNfcError furi_hal_nfc_iso15693_listener_rx(
|
||||
FuriHalSpiBusHandle* handle,
|
||||
uint8_t* rx_data,
|
||||
|
@ -452,6 +452,24 @@ FuriHalNfcError furi_hal_nfc_iso14443a_listener_tx_custom_parity(
|
||||
*/
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_listener_tx_sof(void);
|
||||
|
||||
/** Set ISO15693 parser mode to autodetect
|
||||
*
|
||||
* @return FuriHalNfcError
|
||||
*/
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_detect_mode(void);
|
||||
|
||||
/** Set ISO15693 parser mode to 1OutOf4, disables autodetection
|
||||
*
|
||||
* @return FuriHalNfcError
|
||||
*/
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_force_1outof4(void);
|
||||
|
||||
/** Set ISO15693 parser mode to 1OutOf256, disables autodetection
|
||||
*
|
||||
* @return FuriHalNfcError
|
||||
*/
|
||||
FuriHalNfcError furi_hal_nfc_iso15693_force_1outof256(void);
|
||||
|
||||
/**
|
||||
* @brief Set FeliCa collision resolution parameters in listener mode.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user