[FL-2674] Show error popup when NFC chip is not init/disconnected (#1722)

* Show error popup when NFC chip is not init/disconnected
* Move to dialogs for the error message
* Fix a memory leak and wrap the hal check
* F7: update api_symbols.csv, add furi_hal_nfc_is_init

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Astra 2022-09-19 15:46:56 +03:00 committed by GitHub
parent ed385594a3
commit 3d3c422751
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 37 additions and 1 deletions

View File

@ -231,7 +231,30 @@ void nfc_show_loading_popup(void* context, bool show) {
} }
} }
static bool nfc_is_hal_ready() {
if(!furi_hal_nfc_is_init()) {
// No connection to the chip, show an error screen
DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
DialogMessage* message = dialog_message_alloc();
dialog_message_set_text(
message,
"Error!\nNFC chip failed to start\n\n\nSend a photo of this to:\nsupport@flipperzero.one",
0,
0,
AlignLeft,
AlignTop);
dialog_message_show(dialogs, message);
dialog_message_free(message);
furi_record_close(RECORD_DIALOGS);
return false;
} else {
return true;
}
}
int32_t nfc_app(void* p) { int32_t nfc_app(void* p) {
if(!nfc_is_hal_ready()) return 0;
Nfc* nfc = nfc_alloc(); Nfc* nfc = nfc_alloc();
char* args = p; char* args = p;

View File

@ -33,6 +33,8 @@
#include <nfc/scenes/nfc_scene.h> #include <nfc/scenes/nfc_scene.h>
#include <nfc/helpers/nfc_custom_event.h> #include <nfc/helpers/nfc_custom_event.h>
#include <dialogs/dialogs.h>
#include "rpc/rpc_app.h" #include "rpc/rpc_app.h"
#define NFC_TEXT_STORE_SIZE 128 #define NFC_TEXT_STORE_SIZE 128

View File

@ -1,5 +1,5 @@
entry,status,name,type,params entry,status,name,type,params
Version,+,1.3,, Version,+,1.4,,
Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,, Header,+,applications/services/cli/cli_vcp.h,,
@ -1096,6 +1096,7 @@ Function,+,furi_hal_nfc_field_off,void,
Function,+,furi_hal_nfc_field_on,void, Function,+,furi_hal_nfc_field_on,void,
Function,-,furi_hal_nfc_init,void, Function,-,furi_hal_nfc_init,void,
Function,+,furi_hal_nfc_is_busy,_Bool, Function,+,furi_hal_nfc_is_busy,_Bool,
Function,+,furi_hal_nfc_is_init,_Bool,
Function,+,furi_hal_nfc_listen,_Bool,"uint8_t*, uint8_t, uint8_t*, uint8_t, _Bool, uint32_t" Function,+,furi_hal_nfc_listen,_Bool,"uint8_t*, uint8_t, uint8_t*, uint8_t, _Bool, uint32_t"
Function,+,furi_hal_nfc_listen_rx,_Bool,"FuriHalNfcTxRxContext*, uint32_t" Function,+,furi_hal_nfc_listen_rx,_Bool,"FuriHalNfcTxRxContext*, uint32_t"
Function,+,furi_hal_nfc_listen_sleep,void, Function,+,furi_hal_nfc_listen_sleep,void,

1 entry status name type params
2 Version + 1.3 1.4
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
1096 Function + furi_hal_nfc_field_on void
1097 Function - furi_hal_nfc_init void
1098 Function + furi_hal_nfc_is_busy _Bool
1099 Function + furi_hal_nfc_is_init _Bool
1100 Function + furi_hal_nfc_listen _Bool uint8_t*, uint8_t, uint8_t*, uint8_t, _Bool, uint32_t
1101 Function + furi_hal_nfc_listen_rx _Bool FuriHalNfcTxRxContext*, uint32_t
1102 Function + furi_hal_nfc_listen_sleep void

View File

@ -39,6 +39,10 @@ bool furi_hal_nfc_is_busy() {
return rfalNfcGetState() != RFAL_NFC_STATE_IDLE; return rfalNfcGetState() != RFAL_NFC_STATE_IDLE;
} }
bool furi_hal_nfc_is_init() {
return rfalNfcGetState() != RFAL_NFC_STATE_NOTINIT;
}
void furi_hal_nfc_field_on() { void furi_hal_nfc_field_on() {
furi_hal_nfc_exit_sleep(); furi_hal_nfc_exit_sleep();
st25r3916TxRxOn(); st25r3916TxRxOn();

View File

@ -107,6 +107,12 @@ void furi_hal_nfc_init();
*/ */
bool furi_hal_nfc_is_busy(); bool furi_hal_nfc_is_busy();
/** Check if nfc is initialized
*
* @return true if initialized
*/
bool furi_hal_nfc_is_init();
/** NFC field on /** NFC field on
*/ */
void furi_hal_nfc_field_on(); void furi_hal_nfc_field_on();