Skip to content

Commit 21283aa

Browse files
committed
Merge remote-tracking branch 'origin/dev' into portasynthinca3/3893-js-backport
2 parents 65bda4c + 5f4f4fc commit 21283aa

File tree

12 files changed

+63
-24
lines changed

12 files changed

+63
-24
lines changed

furi/core/event_flag.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ uint32_t furi_event_flag_set(FuriEventFlag* instance, uint32_t flags) {
4848
portYIELD_FROM_ISR(yield);
4949
}
5050
} else {
51+
vTaskSuspendAll();
5152
rflags = xEventGroupSetBits(hEventGroup, (EventBits_t)flags);
53+
(void)xTaskResumeAll();
5254
}
5355

5456
/* Return event flags after setting */

furi/core/event_flag.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,16 @@ FuriEventFlag* furi_event_flag_alloc(void);
2525
void furi_event_flag_free(FuriEventFlag* instance);
2626

2727
/** Set flags
28+
*
29+
* @warning result of this function can be flags that you've just asked to
30+
* set or not if someone was waiting for them and asked to clear it.
31+
* It is highly recommended to read this function and
32+
* xEventGroupSetBits source code.
2833
*
2934
* @param instance pointer to FuriEventFlag
30-
* @param[in] flags The flags
35+
* @param[in] flags The flags to set
3136
*
32-
* @return Resulting flags or error (FuriStatus)
37+
* @return Resulting flags(see warning) or error (FuriStatus)
3338
*/
3439
uint32_t furi_event_flag_set(FuriEventFlag* instance, uint32_t flags);
3540

furi/core/timer.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ static void furi_timer_epilogue(void* context, uint32_t arg) {
4545
UNUSED(arg);
4646

4747
EventGroupHandle_t hEvent = context;
48+
vTaskSuspendAll();
4849
xEventGroupSetBits(hEvent, TIMER_DELETED_EVENT);
50+
(void)xTaskResumeAll();
4951
}
5052

5153
void furi_timer_free(FuriTimer* instance) {
@@ -55,11 +57,13 @@ void furi_timer_free(FuriTimer* instance) {
5557
TimerHandle_t hTimer = (TimerHandle_t)instance;
5658
furi_check(xTimerDelete(hTimer, portMAX_DELAY) == pdPASS);
5759

58-
StaticEventGroup_t event_container;
60+
StaticEventGroup_t event_container = {};
5961
EventGroupHandle_t hEvent = xEventGroupCreateStatic(&event_container);
6062
furi_check(xTimerPendFunctionCall(furi_timer_epilogue, hEvent, 0, portMAX_DELAY) == pdPASS);
6163

62-
xEventGroupWaitBits(hEvent, TIMER_DELETED_EVENT, 0, pdTRUE, portMAX_DELAY);
64+
furi_check(
65+
xEventGroupWaitBits(hEvent, TIMER_DELETED_EVENT, pdFALSE, pdTRUE, portMAX_DELAY) ==
66+
TIMER_DELETED_EVENT);
6367
vEventGroupDelete(hEvent);
6468

6569
free(instance);

lib/lfrfid/protocols/protocol_gproxii.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ void protocol_gproxii_free(ProtocolGProxII* protocol) {
3939
}
4040

4141
uint8_t* protocol_gproxii_get_data(ProtocolGProxII* protocol) {
42-
return protocol->decoded_data;
42+
return protocol->data;
4343
}
4444

4545
bool wiegand_check(uint64_t fc_and_card, bool even_parity, bool odd_parity, int card_len) {
@@ -235,6 +235,7 @@ LevelDuration protocol_gproxii_encoder_yield(ProtocolGProxII* protocol) {
235235
}
236236

237237
void protocol_gproxii_render_data(ProtocolGProxII* protocol, FuriString* result) {
238+
protocol_gproxii_can_be_decoded(protocol);
238239
int xor_code = bit_lib_get_bits(protocol->decoded_data, 0, 8);
239240
int card_len = bit_lib_get_bits(protocol->decoded_data, 8, 6);
240241
int crc_code = bit_lib_get_bits(protocol->decoded_data, 14, 2);

lib/nfc/nfc.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -651,11 +651,12 @@ NfcError nfc_felica_listener_set_sensf_res_data(
651651
const uint8_t* idm,
652652
const uint8_t idm_len,
653653
const uint8_t* pmm,
654-
const uint8_t pmm_len) {
654+
const uint8_t pmm_len,
655+
const uint16_t sys_code) {
655656
furi_check(instance);
656657

657658
FuriHalNfcError error =
658-
furi_hal_nfc_felica_listener_set_sensf_res_data(idm, idm_len, pmm, pmm_len);
659+
furi_hal_nfc_felica_listener_set_sensf_res_data(idm, idm_len, pmm, pmm_len, sys_code);
659660
instance->comm_state = NfcCommStateIdle;
660661
return nfc_process_hal_error(error);
661662
}

lib/nfc/nfc.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,14 +361,16 @@ NfcError nfc_iso14443a_listener_set_col_res_data(
361361
* @param[in] idm_len IDm length in bytes.
362362
* @param[in] pmm pointer to a byte array containing the PMm.
363363
* @param[in] pmm_len PMm length in bytes.
364+
* @param[in] sys_code System code from SYS_C block
364365
* @returns NfcErrorNone on success, any other error code on failure.
365366
*/
366367
NfcError nfc_felica_listener_set_sensf_res_data(
367368
Nfc* instance,
368369
const uint8_t* idm,
369370
const uint8_t idm_len,
370371
const uint8_t* pmm,
371-
const uint8_t pmm_len);
372+
const uint8_t pmm_len,
373+
const uint16_t sys_code);
372374

373375
/**
374376
* @brief Send ISO15693 Start of Frame pattern in listener mode

lib/nfc/nfc_mock.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,8 @@ static void nfc_worker_listener_pass_col_res(Nfc* instance, uint8_t* rx_data, ui
270270
}
271271
} else if(rx_bits == 8 * 8) {
272272
FelicaPollingRequest* request = (FelicaPollingRequest*)rx_data;
273-
if(request->system_code == instance->pt_memory.system_code) {
273+
if(request->system_code == 0xFFFF ||
274+
request->system_code == instance->pt_memory.system_code) {
274275
uint8_t response_size = sizeof(FelicaSensfResData) + 1;
275276
bit_buffer_reset(tx_buffer);
276277
bit_buffer_append_byte(tx_buffer, response_size);
@@ -501,19 +502,19 @@ NfcError nfc_felica_listener_set_sensf_res_data(
501502
const uint8_t* idm,
502503
const uint8_t idm_len,
503504
const uint8_t* pmm,
504-
const uint8_t pmm_len) {
505+
const uint8_t pmm_len,
506+
const uint16_t sys_code) {
505507
furi_assert(instance);
506508
furi_assert(idm);
507509
furi_assert(pmm);
508510
furi_assert(idm_len == 8);
509511
furi_assert(pmm_len == 8);
510512

511-
instance->pt_memory.system_code = 0xFFFF;
513+
instance->pt_memory.system_code = sys_code;
512514
instance->pt_memory.sens_res.code = 0x01;
513515
instance->software_col_res_required = true;
514516
memcpy(instance->pt_memory.sens_res.idm.data, idm, idm_len);
515517
memcpy(instance->pt_memory.sens_res.pmm.data, pmm, pmm_len);
516-
517518
return NfcErrorNone;
518519
}
519520

lib/nfc/protocols/felica/felica_listener.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ FelicaListener* felica_listener_alloc(Nfc* nfc, FelicaData* data) {
2626
memcpy(instance->mc_shadow.data, instance->data->data.fs.mc.data, FELICA_DATA_BLOCK_SIZE);
2727
instance->data->data.fs.state.data[0] = 0;
2828
nfc_config(instance->nfc, NfcModeListener, NfcTechFelica);
29+
const uint16_t system_code = *(uint16_t*)data->data.fs.sys_c.data;
2930
nfc_felica_listener_set_sensf_res_data(
30-
nfc, data->idm.data, sizeof(data->idm), data->pmm.data, sizeof(data->pmm));
31+
nfc, data->idm.data, sizeof(data->idm), data->pmm.data, sizeof(data->pmm), system_code);
3132

3233
return instance;
3334
}

targets/f18/api_symbols.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
entry,status,name,type,params
2-
Version,+,72.6,,
2+
Version,+,73.1,,
33
Header,+,applications/services/bt/bt_service/bt.h,,
44
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
55
Header,+,applications/services/cli/cli.h,,

targets/f7/api_symbols.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
entry,status,name,type,params
2-
Version,+,72.6,,
2+
Version,+,73.1,,
33
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
44
Header,+,applications/services/bt/bt_service/bt.h,,
55
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
@@ -1445,7 +1445,7 @@ Function,+,furi_hal_nfc_abort,FuriHalNfcError,
14451445
Function,+,furi_hal_nfc_acquire,FuriHalNfcError,
14461446
Function,+,furi_hal_nfc_event_start,FuriHalNfcError,
14471447
Function,+,furi_hal_nfc_event_stop,FuriHalNfcError,
1448-
Function,+,furi_hal_nfc_felica_listener_set_sensf_res_data,FuriHalNfcError,"const uint8_t*, const uint8_t, const uint8_t*, const uint8_t"
1448+
Function,+,furi_hal_nfc_felica_listener_set_sensf_res_data,FuriHalNfcError,"const uint8_t*, const uint8_t, const uint8_t*, const uint8_t, const uint16_t"
14491449
Function,+,furi_hal_nfc_field_detect_start,FuriHalNfcError,
14501450
Function,+,furi_hal_nfc_field_detect_stop,FuriHalNfcError,
14511451
Function,+,furi_hal_nfc_field_is_present,_Bool,
@@ -2779,7 +2779,7 @@ Function,+,nfc_device_save,_Bool,"NfcDevice*, const char*"
27792779
Function,+,nfc_device_set_data,void,"NfcDevice*, NfcProtocol, const NfcDeviceData*"
27802780
Function,+,nfc_device_set_loading_callback,void,"NfcDevice*, NfcLoadingCallback, void*"
27812781
Function,+,nfc_device_set_uid,_Bool,"NfcDevice*, const uint8_t*, size_t"
2782-
Function,+,nfc_felica_listener_set_sensf_res_data,NfcError,"Nfc*, const uint8_t*, const uint8_t, const uint8_t*, const uint8_t"
2782+
Function,+,nfc_felica_listener_set_sensf_res_data,NfcError,"Nfc*, const uint8_t*, const uint8_t, const uint8_t*, const uint8_t, const uint16_t"
27832783
Function,+,nfc_free,void,Nfc*
27842784
Function,+,nfc_iso14443a_listener_set_col_res_data,NfcError,"Nfc*, uint8_t*, uint8_t, uint8_t*, uint8_t"
27852785
Function,+,nfc_iso14443a_listener_tx_custom_parity,NfcError,"Nfc*, const BitBuffer*"

0 commit comments

Comments
 (0)