mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-20 04:54:45 -07:00
NFC: Allow choosing DESFire poller cmd mode, fix send_chunks() naming
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
#include "mf_desfire.h"
|
#include "mf_desfire.h"
|
||||||
|
|
||||||
#include <lib/nfc/protocols/iso14443_4a/iso14443_4a_poller.h>
|
#include <lib/nfc/protocols/iso14443_4a/iso14443_4a_poller.h>
|
||||||
|
#include <lib/nfc/helpers/nxp_native_command_mode.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -38,6 +39,16 @@ typedef struct {
|
|||||||
MfDesfirePollerEventData* data; /**< Pointer to event specific data. */
|
MfDesfirePollerEventData* data; /**< Pointer to event specific data. */
|
||||||
} MfDesfirePollerEvent;
|
} MfDesfirePollerEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Change command mode used in poller mode.
|
||||||
|
*
|
||||||
|
* @param[in, out] instance pointer to the instance to affect.
|
||||||
|
* @param[in] command_mode command mode to use in further communication with the card.
|
||||||
|
*/
|
||||||
|
void mf_desfire_poller_set_command_mode(
|
||||||
|
MfDesfirePoller* instance,
|
||||||
|
NxpNativeCommandMode command_mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Transmit and receive MfDesfire chunks in poller mode.
|
* @brief Transmit and receive MfDesfire chunks in poller mode.
|
||||||
*
|
*
|
||||||
@@ -51,11 +62,16 @@ typedef struct {
|
|||||||
* @param[out] rx_buffer pointer to the buffer to be filled with received data.
|
* @param[out] rx_buffer pointer to the buffer to be filled with received data.
|
||||||
* @return MfDesfireErrorNone on success, an error code on failure.
|
* @return MfDesfireErrorNone on success, an error code on failure.
|
||||||
*/
|
*/
|
||||||
MfDesfireError mf_desfire_send_chunks(
|
MfDesfireError mf_desfire_poller_send_chunks(
|
||||||
MfDesfirePoller* instance,
|
MfDesfirePoller* instance,
|
||||||
const BitBuffer* tx_buffer,
|
const BitBuffer* tx_buffer,
|
||||||
BitBuffer* rx_buffer);
|
BitBuffer* rx_buffer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @warning deprecated, use mf_desfire_poller_send_chunks instead
|
||||||
|
*/
|
||||||
|
#define mf_desfire_send_chunks mf_desfire_poller_send_chunks
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Read MfDesfire card version.
|
* @brief Read MfDesfire card version.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -32,7 +32,17 @@ MfDesfireError mf_desfire_process_status_code(uint8_t status_code) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MfDesfireError mf_desfire_send_chunks(
|
void mf_desfire_poller_set_command_mode(
|
||||||
|
MfDesfirePoller* instance,
|
||||||
|
NxpNativeCommandMode command_mode) {
|
||||||
|
furi_check(instance);
|
||||||
|
furi_check(instance->state == MfDesfirePollerStateIdle);
|
||||||
|
furi_check(command_mode < NxpNativeCommandModeMAX);
|
||||||
|
|
||||||
|
instance->command_mode = command_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
MfDesfireError mf_desfire_poller_send_chunks(
|
||||||
MfDesfirePoller* instance,
|
MfDesfirePoller* instance,
|
||||||
const BitBuffer* tx_buffer,
|
const BitBuffer* tx_buffer,
|
||||||
BitBuffer* rx_buffer) {
|
BitBuffer* rx_buffer) {
|
||||||
@@ -44,7 +54,7 @@ MfDesfireError mf_desfire_send_chunks(
|
|||||||
&status_code,
|
&status_code,
|
||||||
tx_buffer,
|
tx_buffer,
|
||||||
rx_buffer,
|
rx_buffer,
|
||||||
NxpNativeCommandModePlain,
|
instance->command_mode,
|
||||||
instance->tx_buffer,
|
instance->tx_buffer,
|
||||||
instance->rx_buffer);
|
instance->rx_buffer);
|
||||||
|
|
||||||
@@ -64,7 +74,8 @@ MfDesfireError mf_desfire_poller_read_version(MfDesfirePoller* instance, MfDesfi
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -86,7 +97,8 @@ MfDesfireError
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -108,7 +120,8 @@ MfDesfireError
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -132,7 +145,7 @@ MfDesfireError mf_desfire_poller_read_key_version(
|
|||||||
bit_buffer_set_byte(instance->input_buffer, 1, key_num);
|
bit_buffer_set_byte(instance->input_buffer, 1, key_num);
|
||||||
|
|
||||||
MfDesfireError error =
|
MfDesfireError error =
|
||||||
mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
mf_desfire_poller_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
||||||
if(error == MfDesfireErrorNone) {
|
if(error == MfDesfireErrorNone) {
|
||||||
if(!mf_desfire_key_version_parse(data, instance->result_buffer)) {
|
if(!mf_desfire_key_version_parse(data, instance->result_buffer)) {
|
||||||
error = MfDesfireErrorProtocol;
|
error = MfDesfireErrorProtocol;
|
||||||
@@ -172,7 +185,8 @@ MfDesfireError
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -205,7 +219,7 @@ MfDesfireError mf_desfire_poller_select_application(
|
|||||||
instance->input_buffer, (const uint8_t*)id, sizeof(MfDesfireApplicationId));
|
instance->input_buffer, (const uint8_t*)id, sizeof(MfDesfireApplicationId));
|
||||||
|
|
||||||
MfDesfireError error =
|
MfDesfireError error =
|
||||||
mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
mf_desfire_poller_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
@@ -220,7 +234,8 @@ MfDesfireError mf_desfire_poller_read_file_ids(MfDesfirePoller* instance, Simple
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -255,7 +270,8 @@ MfDesfireError mf_desfire_poller_read_file_settings(
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
@@ -316,7 +332,8 @@ static MfDesfireError mf_desfire_poller_read_file(
|
|||||||
bit_buffer_append_bytes(instance->input_buffer, (const uint8_t*)¤t_offset, 3);
|
bit_buffer_append_bytes(instance->input_buffer, (const uint8_t*)¤t_offset, 3);
|
||||||
bit_buffer_append_bytes(instance->input_buffer, (const uint8_t*)&bytes_to_read, 3);
|
bit_buffer_append_bytes(instance->input_buffer, (const uint8_t*)&bytes_to_read, 3);
|
||||||
|
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
size_t bytes_received = bit_buffer_get_size_bytes(instance->result_buffer);
|
size_t bytes_received = bit_buffer_get_size_bytes(instance->result_buffer);
|
||||||
@@ -362,7 +379,8 @@ MfDesfireError mf_desfire_poller_read_file_value(
|
|||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
error = mf_desfire_send_chunks(instance, instance->input_buffer, instance->result_buffer);
|
error = mf_desfire_poller_send_chunks(
|
||||||
|
instance, instance->input_buffer, instance->result_buffer);
|
||||||
|
|
||||||
if(error != MfDesfireErrorNone) break;
|
if(error != MfDesfireErrorNone) break;
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ typedef enum {
|
|||||||
|
|
||||||
struct MfDesfirePoller {
|
struct MfDesfirePoller {
|
||||||
Iso14443_4aPoller* iso14443_4a_poller;
|
Iso14443_4aPoller* iso14443_4a_poller;
|
||||||
|
NxpNativeCommandMode command_mode;
|
||||||
MfDesfirePollerSessionState session_state;
|
MfDesfirePollerSessionState session_state;
|
||||||
MfDesfirePollerState state;
|
MfDesfirePollerState state;
|
||||||
MfDesfireError error;
|
MfDesfireError error;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,82.3,,
|
Version,+,83.0,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
||||||
Header,+,applications/services/cli/cli.h,,
|
Header,+,applications/services/cli/cli.h,,
|
||||||
|
|||||||
|
@@ -1,5 +1,5 @@
|
|||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,82.3,,
|
Version,+,83.0,,
|
||||||
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
|
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
||||||
@@ -2647,9 +2647,10 @@ Function,+,mf_desfire_poller_read_key_version,MfDesfireError,"MfDesfirePoller*,
|
|||||||
Function,+,mf_desfire_poller_read_key_versions,MfDesfireError,"MfDesfirePoller*, SimpleArray*, uint32_t"
|
Function,+,mf_desfire_poller_read_key_versions,MfDesfireError,"MfDesfirePoller*, SimpleArray*, uint32_t"
|
||||||
Function,+,mf_desfire_poller_read_version,MfDesfireError,"MfDesfirePoller*, MfDesfireVersion*"
|
Function,+,mf_desfire_poller_read_version,MfDesfireError,"MfDesfirePoller*, MfDesfireVersion*"
|
||||||
Function,+,mf_desfire_poller_select_application,MfDesfireError,"MfDesfirePoller*, const MfDesfireApplicationId*"
|
Function,+,mf_desfire_poller_select_application,MfDesfireError,"MfDesfirePoller*, const MfDesfireApplicationId*"
|
||||||
|
Function,+,mf_desfire_poller_send_chunks,MfDesfireError,"MfDesfirePoller*, const BitBuffer*, BitBuffer*"
|
||||||
|
Function,+,mf_desfire_poller_set_command_mode,void,"MfDesfirePoller*, NxpNativeCommandMode"
|
||||||
Function,+,mf_desfire_reset,void,MfDesfireData*
|
Function,+,mf_desfire_reset,void,MfDesfireData*
|
||||||
Function,+,mf_desfire_save,_Bool,"const MfDesfireData*, FlipperFormat*"
|
Function,+,mf_desfire_save,_Bool,"const MfDesfireData*, FlipperFormat*"
|
||||||
Function,+,mf_desfire_send_chunks,MfDesfireError,"MfDesfirePoller*, const BitBuffer*, BitBuffer*"
|
|
||||||
Function,+,mf_desfire_set_uid,_Bool,"MfDesfireData*, const uint8_t*, size_t"
|
Function,+,mf_desfire_set_uid,_Bool,"MfDesfireData*, const uint8_t*, size_t"
|
||||||
Function,+,mf_desfire_verify,_Bool,"MfDesfireData*, const FuriString*"
|
Function,+,mf_desfire_verify,_Bool,"MfDesfireData*, const FuriString*"
|
||||||
Function,+,mf_plus_alloc,MfPlusData*,
|
Function,+,mf_plus_alloc,MfPlusData*,
|
||||||
|
|||||||
|
Reference in New Issue
Block a user