2021-06-10 15:01:48 +03:00
|
|
|
#include <furi.h>
|
2022-01-05 19:10:18 +03:00
|
|
|
#include <furi_hal.h>
|
2025-04-05 02:58:58 +04:00
|
|
|
#include <cli/cli_main_commands.h>
|
2022-07-26 18:30:49 +03:00
|
|
|
#include <lib/toolbox/args.h>
|
2023-03-15 21:52:32 +08:00
|
|
|
#include <lib/toolbox/hex.h>
|
2025-03-28 14:18:34 +03:00
|
|
|
#include <lib/toolbox/bit_buffer.h>
|
|
|
|
|
#include <lib/nfc/nfc_poller.h>
|
|
|
|
|
#include <lib/nfc/protocols/iso14443_4a/iso14443_4a_poller.h>
|
|
|
|
|
#include <lib/nfc/protocols/iso14443_4b/iso14443_4b_poller.h>
|
|
|
|
|
#include <lib/nfc/protocols/iso15693_3/iso15693_3_poller.h>
|
[FL-3954, FL-3955] New CLI architecture (#4111)
* feat: FuriThread stdin
* ci: fix f18
* feat: stdio callback context
* feat: FuriPipe
* POTENTIALLY EXPLOSIVE pipe welding
* fix: non-explosive welding
* Revert welding
* docs: furi_pipe
* feat: pipe event loop integration
* update f18 sdk
* f18
* docs: make doxygen happy
* fix: event loop not triggering when pipe attached to stdio
* fix: partial stdout in pipe
* allow simultaneous in and out subscription in event loop
* feat: vcp i/o
* feat: cli ansi stuffs and history
* feat: more line editing
* working but slow cli rewrite
* restore previous speed after 4 days of debugging 🥲
* fix: cli_app_should_stop
* fix: cli and event_loop memory leaks
* style: remove commented out code
* ci: fix pvs warnings
* fix: unit tests, event_loop crash
* ci: fix build
* ci: silence pvs warning
* feat: cli gpio
* ci: fix formatting
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* feat: cli completions
* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads
* merge fixups
* temporarily exclude speaker_debug app
* pvs and unit tests fixups
* feat: commands in fals
* move commands out of flash, code cleanup
* ci: fix errors
* fix: run commands in buffer when stopping session
* speedup cli file transfer
* fix f18
* separate cli_shell into modules
* fix pvs warning
* fix qflipper refusing to connect
* remove temp debug logs
* remove erroneous conclusion
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* unit test for the fix
* improve thread stdio callback signatures
* pipe stdout timeout
* update api symbols
* fix f18, formatting
* fix pvs warnings
* increase stack size, hope to fix unit tests
* cli: revert flag changes
* cli: fix formatting
* cli, fbt: loopback perf benchmark
* thread, event_loop: subscribing to thread flags
* cli: signal internal events using thread flags, improve performance
* fix f18, formatting
* event_loop: fix crash
* storage_cli: increase write_chunk buffer size again
* cli: explanation for order=0
* thread, event_loop: thread flags callback refactor
* cli: increase stack size
* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char
* cli: use plain array instead of mlib for history
* cli: prepend file name to static fns
* cli: fix formatting
* cli_shell: increase stack size
* cli: fix rpc lockup
* cli: better lockup fix
* cli: fix f18
* fix merge
---------
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2025-04-02 22:10:10 +04:00
|
|
|
#include <toolbox/pipe.h>
|
2021-06-10 15:01:48 +03:00
|
|
|
|
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.
Starring:
- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer
Supporting roles:
- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance
Special thanks:
@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 07:08:09 +04:00
|
|
|
#include <furi_hal_nfc.h>
|
|
|
|
|
|
|
|
|
|
#define FLAG_EVENT (1 << 10)
|
2022-02-16 14:15:40 +03:00
|
|
|
|
2025-03-28 14:18:34 +03:00
|
|
|
#define NFC_MAX_BUFFER_SIZE (256)
|
|
|
|
|
#define NFC_BASE_PROTOCOL_MAX (3)
|
|
|
|
|
#define POLLER_DONE (1 << 0)
|
|
|
|
|
#define POLLER_ERR (1 << 1)
|
|
|
|
|
static NfcProtocol BASE_PROTOCOL[NFC_BASE_PROTOCOL_MAX] = {
|
|
|
|
|
NfcProtocolIso14443_4a,
|
|
|
|
|
NfcProtocolIso14443_4b,
|
|
|
|
|
NfcProtocolIso15693_3};
|
|
|
|
|
typedef struct ApduContext {
|
|
|
|
|
BitBuffer* tx_buffer;
|
|
|
|
|
BitBuffer* rx_buffer;
|
|
|
|
|
bool ready;
|
|
|
|
|
FuriThreadId thread_id;
|
|
|
|
|
} ApduContext;
|
|
|
|
|
|
2024-03-25 13:53:32 +03:00
|
|
|
static void nfc_cli_print_usage(void) {
|
2022-02-16 14:15:40 +03:00
|
|
|
printf("Usage:\r\n");
|
|
|
|
|
printf("nfc <cmd>\r\n");
|
|
|
|
|
printf("Cmd list:\r\n");
|
2025-03-28 14:18:34 +03:00
|
|
|
printf("\tapdu\t - Send APDU and print response \r\n");
|
2022-03-16 15:57:13 +07:00
|
|
|
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
|
|
|
|
|
printf("\tfield\t - turn field on\r\n");
|
|
|
|
|
}
|
2021-06-10 15:01:48 +03:00
|
|
|
}
|
|
|
|
|
|
[FL-3954, FL-3955] New CLI architecture (#4111)
* feat: FuriThread stdin
* ci: fix f18
* feat: stdio callback context
* feat: FuriPipe
* POTENTIALLY EXPLOSIVE pipe welding
* fix: non-explosive welding
* Revert welding
* docs: furi_pipe
* feat: pipe event loop integration
* update f18 sdk
* f18
* docs: make doxygen happy
* fix: event loop not triggering when pipe attached to stdio
* fix: partial stdout in pipe
* allow simultaneous in and out subscription in event loop
* feat: vcp i/o
* feat: cli ansi stuffs and history
* feat: more line editing
* working but slow cli rewrite
* restore previous speed after 4 days of debugging 🥲
* fix: cli_app_should_stop
* fix: cli and event_loop memory leaks
* style: remove commented out code
* ci: fix pvs warnings
* fix: unit tests, event_loop crash
* ci: fix build
* ci: silence pvs warning
* feat: cli gpio
* ci: fix formatting
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* feat: cli completions
* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads
* merge fixups
* temporarily exclude speaker_debug app
* pvs and unit tests fixups
* feat: commands in fals
* move commands out of flash, code cleanup
* ci: fix errors
* fix: run commands in buffer when stopping session
* speedup cli file transfer
* fix f18
* separate cli_shell into modules
* fix pvs warning
* fix qflipper refusing to connect
* remove temp debug logs
* remove erroneous conclusion
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* unit test for the fix
* improve thread stdio callback signatures
* pipe stdout timeout
* update api symbols
* fix f18, formatting
* fix pvs warnings
* increase stack size, hope to fix unit tests
* cli: revert flag changes
* cli: fix formatting
* cli, fbt: loopback perf benchmark
* thread, event_loop: subscribing to thread flags
* cli: signal internal events using thread flags, improve performance
* fix f18, formatting
* event_loop: fix crash
* storage_cli: increase write_chunk buffer size again
* cli: explanation for order=0
* thread, event_loop: thread flags callback refactor
* cli: increase stack size
* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char
* cli: use plain array instead of mlib for history
* cli: prepend file name to static fns
* cli: fix formatting
* cli_shell: increase stack size
* cli: fix rpc lockup
* cli: better lockup fix
* cli: fix f18
* fix merge
---------
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2025-04-02 22:10:10 +04:00
|
|
|
static void nfc_cli_field(PipeSide* pipe, FuriString* args) {
|
2022-05-06 16:37:10 +03:00
|
|
|
UNUSED(args);
|
2022-03-16 15:57:13 +07:00
|
|
|
// Check if nfc worker is not busy
|
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.
Starring:
- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer
Supporting roles:
- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance
Special thanks:
@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 07:08:09 +04:00
|
|
|
if(furi_hal_nfc_is_hal_ready() != FuriHalNfcErrorNone) {
|
|
|
|
|
printf("NFC chip failed to start\r\n");
|
2022-03-16 15:57:13 +07:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.
Starring:
- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer
Supporting roles:
- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance
Special thanks:
@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 07:08:09 +04:00
|
|
|
furi_hal_nfc_acquire();
|
|
|
|
|
furi_hal_nfc_low_power_mode_stop();
|
|
|
|
|
furi_hal_nfc_poller_field_on();
|
2022-03-16 15:57:13 +07:00
|
|
|
|
|
|
|
|
printf("Field is on. Don't leave device in this mode for too long.\r\n");
|
|
|
|
|
printf("Press Ctrl+C to abort\r\n");
|
|
|
|
|
|
[FL-3954, FL-3955] New CLI architecture (#4111)
* feat: FuriThread stdin
* ci: fix f18
* feat: stdio callback context
* feat: FuriPipe
* POTENTIALLY EXPLOSIVE pipe welding
* fix: non-explosive welding
* Revert welding
* docs: furi_pipe
* feat: pipe event loop integration
* update f18 sdk
* f18
* docs: make doxygen happy
* fix: event loop not triggering when pipe attached to stdio
* fix: partial stdout in pipe
* allow simultaneous in and out subscription in event loop
* feat: vcp i/o
* feat: cli ansi stuffs and history
* feat: more line editing
* working but slow cli rewrite
* restore previous speed after 4 days of debugging 🥲
* fix: cli_app_should_stop
* fix: cli and event_loop memory leaks
* style: remove commented out code
* ci: fix pvs warnings
* fix: unit tests, event_loop crash
* ci: fix build
* ci: silence pvs warning
* feat: cli gpio
* ci: fix formatting
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* feat: cli completions
* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads
* merge fixups
* temporarily exclude speaker_debug app
* pvs and unit tests fixups
* feat: commands in fals
* move commands out of flash, code cleanup
* ci: fix errors
* fix: run commands in buffer when stopping session
* speedup cli file transfer
* fix f18
* separate cli_shell into modules
* fix pvs warning
* fix qflipper refusing to connect
* remove temp debug logs
* remove erroneous conclusion
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* unit test for the fix
* improve thread stdio callback signatures
* pipe stdout timeout
* update api symbols
* fix f18, formatting
* fix pvs warnings
* increase stack size, hope to fix unit tests
* cli: revert flag changes
* cli: fix formatting
* cli, fbt: loopback perf benchmark
* thread, event_loop: subscribing to thread flags
* cli: signal internal events using thread flags, improve performance
* fix f18, formatting
* event_loop: fix crash
* storage_cli: increase write_chunk buffer size again
* cli: explanation for order=0
* thread, event_loop: thread flags callback refactor
* cli: increase stack size
* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char
* cli: use plain array instead of mlib for history
* cli: prepend file name to static fns
* cli: fix formatting
* cli_shell: increase stack size
* cli: fix rpc lockup
* cli: better lockup fix
* cli: fix f18
* fix merge
---------
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2025-04-02 22:10:10 +04:00
|
|
|
while(!cli_is_pipe_broken_or_is_etx_next_char(pipe)) {
|
2022-07-20 13:56:33 +03:00
|
|
|
furi_delay_ms(50);
|
2022-03-16 15:57:13 +07:00
|
|
|
}
|
|
|
|
|
|
NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.
Starring:
- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer
Supporting roles:
- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance
Special thanks:
@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 07:08:09 +04:00
|
|
|
furi_hal_nfc_low_power_mode_start();
|
|
|
|
|
furi_hal_nfc_release();
|
2023-03-15 21:52:32 +08:00
|
|
|
}
|
|
|
|
|
|
2025-03-28 14:18:34 +03:00
|
|
|
static NfcCommand trx_callback(NfcGenericEvent event, void* context) {
|
|
|
|
|
furi_check(context);
|
|
|
|
|
ApduContext* apdu_context = (ApduContext*)context;
|
|
|
|
|
|
|
|
|
|
if(apdu_context->ready) {
|
|
|
|
|
apdu_context->ready = false;
|
|
|
|
|
if(NfcProtocolIso14443_4a == event.protocol) {
|
|
|
|
|
Iso14443_4aError err = iso14443_4a_poller_send_block(
|
|
|
|
|
event.instance, apdu_context->tx_buffer, apdu_context->rx_buffer);
|
|
|
|
|
if(Iso14443_4aErrorNone == err) {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_DONE);
|
|
|
|
|
return NfcCommandContinue;
|
|
|
|
|
} else {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_ERR);
|
|
|
|
|
return NfcCommandStop;
|
|
|
|
|
}
|
|
|
|
|
} else if(NfcProtocolIso14443_4b == event.protocol) {
|
|
|
|
|
Iso14443_4bError err = iso14443_4b_poller_send_block(
|
|
|
|
|
event.instance, apdu_context->tx_buffer, apdu_context->rx_buffer);
|
|
|
|
|
if(Iso14443_4bErrorNone == err) {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_DONE);
|
|
|
|
|
return NfcCommandContinue;
|
|
|
|
|
} else {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_ERR);
|
|
|
|
|
return NfcCommandStop;
|
|
|
|
|
}
|
|
|
|
|
} else if(NfcProtocolIso15693_3 == event.protocol) {
|
|
|
|
|
Iso15693_3Error err = iso15693_3_poller_send_frame(
|
|
|
|
|
event.instance,
|
|
|
|
|
apdu_context->tx_buffer,
|
|
|
|
|
apdu_context->rx_buffer,
|
|
|
|
|
ISO15693_3_FDT_POLL_FC);
|
|
|
|
|
if(Iso15693_3ErrorNone == err) {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_DONE);
|
|
|
|
|
return NfcCommandContinue;
|
|
|
|
|
} else {
|
|
|
|
|
furi_thread_flags_set(apdu_context->thread_id, POLLER_ERR);
|
|
|
|
|
return NfcCommandStop;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// should never reach here
|
|
|
|
|
furi_crash("Unknown protocol");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
furi_delay_ms(100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NfcCommandContinue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void nfc_cli_apdu(Cli* cli, FuriString* args) {
|
|
|
|
|
UNUSED(cli);
|
|
|
|
|
Nfc* nfc = NULL;
|
|
|
|
|
NfcPoller* poller = NULL;
|
|
|
|
|
FuriString* data = furi_string_alloc();
|
|
|
|
|
uint8_t* req_buffer = NULL;
|
|
|
|
|
uint8_t* resp_buffer = NULL;
|
|
|
|
|
size_t apdu_size = 0;
|
|
|
|
|
size_t resp_size = 0;
|
|
|
|
|
NfcProtocol current_protocol = NfcProtocolInvalid;
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
if(0 == args_get_first_word_length(args)) {
|
|
|
|
|
printf(
|
|
|
|
|
"Use like `nfc apdu 00a404000e325041592e5359532e444446303100 00a4040008a0000003010102` \r\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
nfc = nfc_alloc();
|
|
|
|
|
|
|
|
|
|
printf("detecting tag\r\n");
|
|
|
|
|
for(int i = 0; i < NFC_BASE_PROTOCOL_MAX; i++) {
|
|
|
|
|
poller = nfc_poller_alloc(nfc, BASE_PROTOCOL[i]);
|
|
|
|
|
bool is_detected = nfc_poller_detect(poller);
|
|
|
|
|
nfc_poller_free(poller);
|
|
|
|
|
if(is_detected) {
|
|
|
|
|
current_protocol = BASE_PROTOCOL[i];
|
|
|
|
|
printf("detected tag:%d\r\n", BASE_PROTOCOL[i]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(NfcProtocolInvalid == current_protocol) {
|
|
|
|
|
nfc_free(nfc);
|
|
|
|
|
printf("Can not find any tag\r\n");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
poller = nfc_poller_alloc(nfc, current_protocol);
|
|
|
|
|
ApduContext* apdu_context = malloc(sizeof(ApduContext));
|
|
|
|
|
apdu_context->tx_buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE);
|
|
|
|
|
apdu_context->rx_buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE);
|
|
|
|
|
apdu_context->ready = false;
|
|
|
|
|
apdu_context->thread_id = furi_thread_get_current_id();
|
|
|
|
|
|
|
|
|
|
nfc_poller_start(poller, trx_callback, apdu_context);
|
|
|
|
|
while(args_read_string_and_trim(args, data)) {
|
|
|
|
|
bit_buffer_reset(apdu_context->tx_buffer);
|
|
|
|
|
bit_buffer_reset(apdu_context->rx_buffer);
|
|
|
|
|
apdu_size = furi_string_size(data) / 2;
|
|
|
|
|
req_buffer = malloc(apdu_size);
|
|
|
|
|
|
|
|
|
|
hex_chars_to_uint8(furi_string_get_cstr(data), req_buffer);
|
|
|
|
|
printf("Sending APDU:%s to Tag\r\n", furi_string_get_cstr(data));
|
|
|
|
|
bit_buffer_copy_bytes(apdu_context->tx_buffer, req_buffer, apdu_size);
|
|
|
|
|
apdu_context->ready = true;
|
|
|
|
|
uint32_t flags = furi_thread_flags_wait(POLLER_DONE, FuriFlagWaitAny, 3000);
|
|
|
|
|
if(0 == (flags & POLLER_DONE)) {
|
|
|
|
|
printf("Error or Timeout");
|
|
|
|
|
free(req_buffer);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
furi_assert(apdu_context->ready == false);
|
|
|
|
|
resp_size = bit_buffer_get_size_bytes(apdu_context->rx_buffer) * 2;
|
|
|
|
|
if(!resp_size) {
|
|
|
|
|
printf("No response\r\n");
|
|
|
|
|
free(req_buffer);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
resp_buffer = malloc(resp_size);
|
|
|
|
|
uint8_to_hex_chars(
|
|
|
|
|
bit_buffer_get_data(apdu_context->rx_buffer), resp_buffer, resp_size);
|
|
|
|
|
resp_buffer[resp_size] = 0;
|
|
|
|
|
printf("Response: %s\r\n", resp_buffer);
|
|
|
|
|
|
|
|
|
|
free(req_buffer);
|
|
|
|
|
free(resp_buffer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nfc_poller_stop(poller);
|
|
|
|
|
nfc_poller_free(poller);
|
|
|
|
|
nfc_free(nfc);
|
|
|
|
|
|
|
|
|
|
bit_buffer_free(apdu_context->tx_buffer);
|
|
|
|
|
bit_buffer_free(apdu_context->rx_buffer);
|
|
|
|
|
free(apdu_context);
|
|
|
|
|
} while(false);
|
|
|
|
|
|
|
|
|
|
furi_string_free(data);
|
|
|
|
|
}
|
|
|
|
|
|
[FL-3928, FL-3929] CLI commands in fals and threads (#4116)
* feat: FuriThread stdin
* ci: fix f18
* feat: stdio callback context
* feat: FuriPipe
* POTENTIALLY EXPLOSIVE pipe welding
* fix: non-explosive welding
* Revert welding
* docs: furi_pipe
* feat: pipe event loop integration
* update f18 sdk
* f18
* docs: make doxygen happy
* fix: event loop not triggering when pipe attached to stdio
* fix: partial stdout in pipe
* allow simultaneous in and out subscription in event loop
* feat: vcp i/o
* feat: cli ansi stuffs and history
* feat: more line editing
* working but slow cli rewrite
* restore previous speed after 4 days of debugging 🥲
* fix: cli_app_should_stop
* fix: cli and event_loop memory leaks
* style: remove commented out code
* ci: fix pvs warnings
* fix: unit tests, event_loop crash
* ci: fix build
* ci: silence pvs warning
* feat: cli gpio
* ci: fix formatting
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* feat: cli completions
* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads
* merge fixups
* temporarily exclude speaker_debug app
* pvs and unit tests fixups
* feat: commands in fals
* move commands out of flash, code cleanup
* ci: fix errors
* fix: run commands in buffer when stopping session
* speedup cli file transfer
* fix f18
* separate cli_shell into modules
* fix pvs warning
* fix qflipper refusing to connect
* remove temp debug logs
* remove erroneous conclusion
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* unit test for the fix
* improve thread stdio callback signatures
* pipe stdout timeout
* update api symbols
* fix f18, formatting
* fix pvs warnings
* increase stack size, hope to fix unit tests
* cli completions
* more key combos
* commands in fals
* move commands out of flash
* ci: fix errors
* speedup cli file transfer
* merge fixups
* fix f18
* cli: revert flag changes
* cli: fix formatting
* cli, fbt: loopback perf benchmark
* thread, event_loop: subscribing to thread flags
* cli: signal internal events using thread flags, improve performance
* fix f18, formatting
* event_loop: fix crash
* storage_cli: increase write_chunk buffer size again
* cli: explanation for order=0
* thread, event_loop: thread flags callback refactor
* cli: increase stack size
* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char
* cli: use plain array instead of mlib for history
* cli: prepend file name to static fns
* cli: fix formatting
* cli_shell: increase stack size
* cli_shell: give up pipe to command thread
* fix formatting
* fix: format
* fix merge
* fix. merge.
* cli_shell: fix detach ordering
* desktop: record_cli -> record_cli_vcp
* cli: fix spelling, reload/remove ext cmds on card mount/unmount
* cli: fix race conditions and formatting
* scripts: wait for CTS to go high before starting flipper
* scripts: better race condition fix
* REVERT THIS: test script race condition fix
* Revert "REVERT THIS: test script race condition fix"
This reverts commit 3b028d29b07212755872c5706c8c6a58be551636.
* REVERT THIS: test script fix
* scripts: sleep?
* cli: updated oplist for CliCommandTree
* Revert "REVERT THIS: test script fix"
This reverts commit e9846318549ce092ef422ff97522ba51916163be.
* cli: mention memory leak in FL ticket
---------
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: hedger <hedger@nanode.su>
2025-04-03 21:39:53 +04:00
|
|
|
static void execute(PipeSide* pipe, FuriString* args, void* context) {
|
2022-05-06 16:37:10 +03:00
|
|
|
UNUSED(context);
|
2022-10-06 01:15:23 +10:00
|
|
|
FuriString* cmd;
|
|
|
|
|
cmd = furi_string_alloc();
|
2022-02-16 14:15:40 +03:00
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
if(!args_read_string_and_trim(args, cmd)) {
|
|
|
|
|
nfc_cli_print_usage();
|
|
|
|
|
break;
|
|
|
|
|
}
|
2025-03-28 14:18:34 +03:00
|
|
|
if(furi_string_cmp_str(cmd, "apdu") == 0) {
|
|
|
|
|
nfc_cli_apdu(cli, args);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2022-03-16 15:57:13 +07:00
|
|
|
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
|
2022-10-06 01:15:23 +10:00
|
|
|
if(furi_string_cmp_str(cmd, "field") == 0) {
|
[FL-3954, FL-3955] New CLI architecture (#4111)
* feat: FuriThread stdin
* ci: fix f18
* feat: stdio callback context
* feat: FuriPipe
* POTENTIALLY EXPLOSIVE pipe welding
* fix: non-explosive welding
* Revert welding
* docs: furi_pipe
* feat: pipe event loop integration
* update f18 sdk
* f18
* docs: make doxygen happy
* fix: event loop not triggering when pipe attached to stdio
* fix: partial stdout in pipe
* allow simultaneous in and out subscription in event loop
* feat: vcp i/o
* feat: cli ansi stuffs and history
* feat: more line editing
* working but slow cli rewrite
* restore previous speed after 4 days of debugging 🥲
* fix: cli_app_should_stop
* fix: cli and event_loop memory leaks
* style: remove commented out code
* ci: fix pvs warnings
* fix: unit tests, event_loop crash
* ci: fix build
* ci: silence pvs warning
* feat: cli gpio
* ci: fix formatting
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* feat: cli completions
* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads
* merge fixups
* temporarily exclude speaker_debug app
* pvs and unit tests fixups
* feat: commands in fals
* move commands out of flash, code cleanup
* ci: fix errors
* fix: run commands in buffer when stopping session
* speedup cli file transfer
* fix f18
* separate cli_shell into modules
* fix pvs warning
* fix qflipper refusing to connect
* remove temp debug logs
* remove erroneous conclusion
* Fix memory leak during event loop unsubscription
* Event better memory leak fix
* unit test for the fix
* improve thread stdio callback signatures
* pipe stdout timeout
* update api symbols
* fix f18, formatting
* fix pvs warnings
* increase stack size, hope to fix unit tests
* cli: revert flag changes
* cli: fix formatting
* cli, fbt: loopback perf benchmark
* thread, event_loop: subscribing to thread flags
* cli: signal internal events using thread flags, improve performance
* fix f18, formatting
* event_loop: fix crash
* storage_cli: increase write_chunk buffer size again
* cli: explanation for order=0
* thread, event_loop: thread flags callback refactor
* cli: increase stack size
* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char
* cli: use plain array instead of mlib for history
* cli: prepend file name to static fns
* cli: fix formatting
* cli_shell: increase stack size
* cli: fix rpc lockup
* cli: better lockup fix
* cli: fix f18
* fix merge
---------
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2025-04-02 22:10:10 +04:00
|
|
|
nfc_cli_field(pipe, args);
|
2022-03-16 15:57:13 +07:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-16 14:15:40 +03:00
|
|
|
nfc_cli_print_usage();
|
|
|
|
|
} while(false);
|
|
|
|
|
|
2022-10-06 01:15:23 +10:00
|
|
|
furi_string_free(cmd);
|
2022-02-16 14:15:40 +03:00
|
|
|
}
|
|
|
|
|
|
2025-04-05 02:58:58 +04:00
|
|
|
CLI_COMMAND_INTERFACE(nfc, execute, CliCommandFlagDefault, 1024, CLI_APPID);
|