Skip to content

Commit 6044e42

Browse files
Merge branch 'portasynthinca3/3954-3955-new-cli-architecture' of https://github.com/flipperdevices/flipperzero-firmware into portasynthinca3/3954-3955-new-cli-architecture
2 parents a66d105 + 9aec0cc commit 6044e42

File tree

6 files changed

+38
-27
lines changed

6 files changed

+38
-27
lines changed

lib/lfrfid/protocols/protocol_securakey.c

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,22 @@ uint8_t* protocol_securakey_get_data(ProtocolSecurakey* protocol) {
6161
static bool protocol_securakey_can_be_decoded(ProtocolSecurakey* protocol) {
6262
// check 19 bits preamble + format flag
6363
if(bit_lib_get_bits_32(protocol->RKKT_encoded_data, 0, 19) == 0b0111111111000000000) {
64-
protocol->bit_format = 0;
65-
return true;
64+
if(bit_lib_test_parity(protocol->RKKT_encoded_data, 2, 54, BitLibParityAlways0, 9)) {
65+
protocol->bit_format = 0;
66+
return true;
67+
}
6668
} else if(bit_lib_get_bits_32(protocol->RKKT_encoded_data, 0, 19) == 0b0111111111001011010) {
67-
protocol->bit_format = 26;
68-
return true;
69+
if(bit_lib_test_parity(protocol->RKKT_encoded_data, 2, 90, BitLibParityAlways0, 9)) {
70+
protocol->bit_format = 26;
71+
return true;
72+
}
6973
} else if(bit_lib_get_bits_32(protocol->RKKT_encoded_data, 0, 19) == 0b0111111111001100000) {
70-
protocol->bit_format = 32;
71-
return true;
72-
} else {
73-
return false;
74+
if(bit_lib_test_parity(protocol->RKKT_encoded_data, 2, 90, BitLibParityAlways0, 9)) {
75+
protocol->bit_format = 32;
76+
return true;
77+
}
7478
}
79+
return false;
7580
}
7681

7782
static void protocol_securakey_decode(ProtocolSecurakey* protocol) {

lib/nfc/protocols/felica/felica_poller.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ NfcCommand felica_poller_state_handler_auth_internal(FelicaPoller* instance) {
118118
blocks[1] = FELICA_BLOCK_INDEX_WCNT;
119119
blocks[2] = FELICA_BLOCK_INDEX_MAC_A;
120120
FelicaPollerReadCommandResponse* rx_resp;
121-
error = felica_poller_read_blocks(instance, sizeof(blocks), blocks, &rx_resp);
121+
error = felica_poller_read_blocks(
122+
instance, sizeof(blocks), blocks, FELICA_SERVICE_RO_ACCESS, &rx_resp);
122123
if(error != FelicaErrorNone || rx_resp->SF1 != 0 || rx_resp->SF2 != 0) break;
123124

124125
if(felica_check_mac(
@@ -174,7 +175,7 @@ NfcCommand felica_poller_state_handler_auth_external(FelicaPoller* instance) {
174175
if(error != FelicaErrorNone || tx_resp->SF1 != 0 || tx_resp->SF2 != 0) break;
175176

176177
FelicaPollerReadCommandResponse* rx_resp;
177-
error = felica_poller_read_blocks(instance, 1, blocks, &rx_resp);
178+
error = felica_poller_read_blocks(instance, 1, blocks, FELICA_SERVICE_RO_ACCESS, &rx_resp);
178179
if(error != FelicaErrorNone || rx_resp->SF1 != 0 || rx_resp->SF2 != 0) break;
179180

180181
instance->data->data.fs.state.SF1 = 0;
@@ -203,7 +204,8 @@ NfcCommand felica_poller_state_handler_read_blocks(FelicaPoller* instance) {
203204
}
204205

205206
FelicaPollerReadCommandResponse* response;
206-
FelicaError error = felica_poller_read_blocks(instance, block_count, block_list, &response);
207+
FelicaError error = felica_poller_read_blocks(
208+
instance, block_count, block_list, FELICA_SERVICE_RO_ACCESS, &response);
207209
if(error == FelicaErrorNone) {
208210
block_count = (response->SF1 == 0) ? response->block_count : block_count;
209211
uint8_t* data_ptr =

lib/nfc/protocols/felica/felica_poller.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,23 @@ typedef struct {
5656
*/
5757
FelicaError felica_poller_activate(FelicaPoller* instance, FelicaData* data);
5858

59+
/**
60+
* @brief Performs felica read operation for blocks provided as parameters
61+
*
62+
* @param[in, out] instance pointer to the instance to be used in the transaction.
63+
* @param[in] block_count Amount of blocks involved in reading procedure
64+
* @param[in] block_numbers Array with block indexes according to felica docs
65+
* @param[in] service_code Service code for the read operation
66+
* @param[out] response_ptr Pointer to the response structure
67+
* @return FelicaErrorNone on success, an error code on failure.
68+
*/
69+
FelicaError felica_poller_read_blocks(
70+
FelicaPoller* instance,
71+
const uint8_t block_count,
72+
const uint8_t* const block_numbers,
73+
uint16_t service_code,
74+
FelicaPollerReadCommandResponse** const response_ptr);
75+
5976
#ifdef __cplusplus
6077
}
6178
#endif

lib/nfc/protocols/felica/felica_poller_i.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ FelicaError felica_poller_read_blocks(
134134
FelicaPoller* instance,
135135
const uint8_t block_count,
136136
const uint8_t* const block_numbers,
137+
uint16_t service_code,
137138
FelicaPollerReadCommandResponse** const response_ptr) {
138139
furi_assert(instance);
139140
furi_assert(block_count <= 4);
@@ -143,7 +144,7 @@ FelicaError felica_poller_read_blocks(
143144
felica_poller_prepare_tx_buffer(
144145
instance,
145146
FELICA_CMD_READ_WITHOUT_ENCRYPTION,
146-
FELICA_SERVICE_RO_ACCESS,
147+
service_code,
147148
block_count,
148149
block_numbers,
149150
0,

lib/nfc/protocols/felica/felica_poller_i.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,6 @@ FelicaError felica_poller_polling(
7070
const FelicaPollerPollingCommand* cmd,
7171
FelicaPollerPollingResponse* resp);
7272

73-
/**
74-
* @brief Performs felica read operation for blocks provided as parameters
75-
*
76-
* @param[in, out] instance pointer to the instance to be used in the transaction.
77-
* @param[in] block_count Amount of blocks involved in reading procedure
78-
* @param[in] block_numbers Array with block indexes according to felica docs
79-
* @param[out] response_ptr Pointer to the response structure
80-
* @return FelicaErrorNone on success, an error code on failure.
81-
*/
82-
FelicaError felica_poller_read_blocks(
83-
FelicaPoller* instance,
84-
const uint8_t block_count,
85-
const uint8_t* const block_numbers,
86-
FelicaPollerReadCommandResponse** const response_ptr);
87-
8873
/**
8974
* @brief Performs felica write operation with data provided as parameters
9075
*

targets/f7/api_symbols.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,7 @@ Function,+,felica_get_uid,const uint8_t*,"const FelicaData*, size_t*"
10491049
Function,+,felica_is_equal,_Bool,"const FelicaData*, const FelicaData*"
10501050
Function,+,felica_load,_Bool,"FelicaData*, FlipperFormat*, uint32_t"
10511051
Function,+,felica_poller_activate,FelicaError,"FelicaPoller*, FelicaData*"
1052+
Function,+,felica_poller_read_blocks,FelicaError,"FelicaPoller*, const uint8_t, const uint8_t*, uint16_t, FelicaPollerReadCommandResponse**"
10521053
Function,+,felica_poller_sync_read,FelicaError,"Nfc*, FelicaData*, const FelicaCardKey*"
10531054
Function,+,felica_reset,void,FelicaData*
10541055
Function,+,felica_save,_Bool,"const FelicaData*, FlipperFormat*"

0 commit comments

Comments
 (0)