Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…Playlist

# Conflicts:
#	nfc_playlist/scenes/nfc_playlist_scene_emulation.c
  • Loading branch information
Willy-JL committed Nov 6, 2024
2 parents 1881e67 + 415ad7e commit 0261767
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 40 deletions.
2 changes: 1 addition & 1 deletion nfc_playlist/application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ App(
fap_category="NFC",
fap_author="@acegoal07",
fap_weburl="https://github.com/acegoal07/FlipperZero_NFC_Playlist/tree/main",
fap_version="2.7",
fap_version="2.8",
fap_icon_assets="assets",
fap_icon="assets/Playlist_10px.png",
fap_private_libs=[
Expand Down
17 changes: 13 additions & 4 deletions nfc_playlist/lib/emulation_worker/nfc_playlist_emulation_worker.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,17 +68,26 @@ bool nfc_playlist_emulation_worker_is_emulating(
return nfc_playlist_emulation_worker->state == NfcPlaylistEmulationWorkerState_Emulating;
}

void nfc_playlist_emulation_worker_set_nfc_data(
bool nfc_playlist_emulation_worker_set_nfc_data(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker,
char* file_path) {
furi_assert(nfc_playlist_emulation_worker);
nfc_device_load(nfc_playlist_emulation_worker->nfc_device, file_path);
nfc_playlist_emulation_worker->nfc_protocol =
nfc_device_get_protocol(nfc_playlist_emulation_worker->nfc_device);
if(nfc_device_load(nfc_playlist_emulation_worker->nfc_device, file_path)) {
nfc_playlist_emulation_worker->nfc_protocol =
nfc_device_get_protocol(nfc_playlist_emulation_worker->nfc_device);
return true;
}
return false;
}

void nfc_playlist_emulation_worker_clear_nfc_data(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker) {
furi_assert(nfc_playlist_emulation_worker);
nfc_device_clear(nfc_playlist_emulation_worker->nfc_device);
}

bool nfc_playlist_emulation_worker_valid_protocol(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker) {
furi_assert(nfc_playlist_emulation_worker);
return nfc_playlist_emulation_worker->nfc_protocol != NfcProtocolInvalid;
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ int32_t nfc_playlist_emulation_worker_task(void* context);

bool nfc_playlist_emulation_worker_is_emulating(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker);
void nfc_playlist_emulation_worker_set_nfc_data(
bool nfc_playlist_emulation_worker_set_nfc_data(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker,
char* file_path);
void nfc_playlist_emulation_worker_clear_nfc_data(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker);
bool nfc_playlist_emulation_worker_valid_protocol(
NfcPlaylistEmulationWorker* nfc_playlist_emulation_worker);
141 changes: 107 additions & 34 deletions nfc_playlist/scenes/nfc_playlist_scene_emulation.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
nfc_playlist->popup,
"The playlist you have\nselected is empty",
64,
10,
5,
AlignCenter,
AlignTop);
} else if(file_stream_open(
Expand Down Expand Up @@ -53,7 +53,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
if(delay_setting_on) {
if(delay_active && !skip_delay) {
popup_set_header(
nfc_playlist->popup, "Delaying", 64, 10, AlignCenter, AlignTop);
nfc_playlist->popup, "Delaying", 64, 5, AlignCenter, AlignTop);
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
int time_counter_delay_ms =
(options_emulate_delay[nfc_playlist->settings.emulate_delay] * 1000);
Expand Down Expand Up @@ -88,6 +88,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
(options_emulate_timeout[nfc_playlist->settings.emulate_timeout] * 1000);

if(furi_string_cmpi_str(tmp_file_ext, ".nfc") != 0) {
// Invalid file type error
if(nfc_playlist->settings.skip_error) {
skip_delay = true;
continue;
Expand All @@ -100,7 +101,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
nfc_playlist->popup,
furi_string_get_cstr(tmp_header_str),
64,
10,
5,
AlignCenter,
AlignTop);
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
Expand All @@ -118,6 +119,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
time_counter_ms -= 50;
};
} else if(!storage_file_exists(storage, furi_string_get_cstr(line))) {
// File not found error
if(nfc_playlist->settings.skip_error) {
skip_delay = true;
continue;
Expand All @@ -130,7 +132,7 @@ int32_t nfc_playlist_emulation_task(void* context) {
nfc_playlist->popup,
furi_string_get_cstr(tmp_header_str),
64,
10,
5,
AlignCenter,
AlignTop);
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
Expand All @@ -148,38 +150,109 @@ int32_t nfc_playlist_emulation_task(void* context) {
time_counter_ms -= 50;
};
} else {
furi_string_printf(
tmp_header_str, "Emulating:\n%s", furi_string_get_cstr(tmp_file_name));
popup_set_header(
nfc_playlist->popup,
furi_string_get_cstr(tmp_header_str),
64,
10,
AlignCenter,
AlignTop);
nfc_playlist_emulation_worker_set_nfc_data(
nfc_playlist->nfc_playlist_emulation_worker,
(char*)furi_string_get_cstr(line));
nfc_playlist_emulation_worker_start(nfc_playlist->nfc_playlist_emulation_worker);
start_blink(nfc_playlist, NfcPlaylistLedState_Normal);
while(nfc_playlist_emulation_worker_is_emulating(
nfc_playlist->nfc_playlist_emulation_worker) &&
time_counter_ms > 0 &&
EmulationState == NfcPlaylistEmulationState_Emulating) {
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms / 1000));
popup_set_text(
if(nfc_playlist_emulation_worker_set_nfc_data(
nfc_playlist->nfc_playlist_emulation_worker,
(char*)furi_string_get_cstr(line))) {
if(nfc_playlist_emulation_worker_valid_protocol(
nfc_playlist->nfc_playlist_emulation_worker)) {
// Emulate NFC data
furi_string_printf(
tmp_header_str, "Emulating:\n%s", furi_string_get_cstr(tmp_file_name));
popup_set_header(
nfc_playlist->popup,
furi_string_get_cstr(tmp_header_str),
64,
5,
AlignCenter,
AlignTop);
nfc_playlist_emulation_worker_start(
nfc_playlist->nfc_playlist_emulation_worker);
start_blink(nfc_playlist, NfcPlaylistLedState_Normal);
while(nfc_playlist_emulation_worker_is_emulating(
nfc_playlist->nfc_playlist_emulation_worker) &&
time_counter_ms > 0 &&
EmulationState == NfcPlaylistEmulationState_Emulating) {
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms / 1000));
popup_set_text(
nfc_playlist->popup,
furi_string_get_cstr(tmp_counter_str),
64,
50,
AlignCenter,
AlignTop);
furi_delay_ms(50);
time_counter_ms -= 50;
};
nfc_playlist_emulation_worker_stop(
nfc_playlist->nfc_playlist_emulation_worker);
nfc_playlist_emulation_worker_clear_nfc_data(
nfc_playlist->nfc_playlist_emulation_worker);
} else {
// Invalid NFC protocol error
nfc_playlist_emulation_worker_clear_nfc_data(
nfc_playlist->nfc_playlist_emulation_worker);
if(nfc_playlist->settings.skip_error) {
skip_delay = true;
continue;
}
furi_string_printf(
tmp_header_str,
"ERROR invalid\nNFC protocol:\n%s",
furi_string_get_cstr(tmp_file_name));
popup_set_header(
nfc_playlist->popup,
furi_string_get_cstr(tmp_header_str),
64,
5,
AlignCenter,
AlignTop);
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
while(time_counter_ms > 0 &&
EmulationState == NfcPlaylistEmulationState_Emulating) {
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms / 1000));
popup_set_text(
nfc_playlist->popup,
furi_string_get_cstr(tmp_counter_str),
64,
50,
AlignCenter,
AlignTop);
furi_delay_ms(50);
time_counter_ms -= 50;
};
}
} else {
// Failed to load NFC data error
if(nfc_playlist->settings.skip_error) {
skip_delay = true;
continue;
}
furi_string_printf(
tmp_header_str,
"ERROR failed to\nload NFC data:\n%s",
furi_string_get_cstr(tmp_file_name));
popup_set_header(
nfc_playlist->popup,
furi_string_get_cstr(tmp_counter_str),
furi_string_get_cstr(tmp_header_str),
64,
50,
5,
AlignCenter,
AlignTop);
furi_delay_ms(50);
time_counter_ms -= 50;
};
nfc_playlist_emulation_worker_stop(nfc_playlist->nfc_playlist_emulation_worker);
nfc_playlist_emulation_worker_clear_nfc_data(
nfc_playlist->nfc_playlist_emulation_worker);
start_blink(nfc_playlist, NfcPlaylistLedState_Error);
while(time_counter_ms > 0 &&
EmulationState == NfcPlaylistEmulationState_Emulating) {
furi_string_printf(tmp_counter_str, "%ds", (time_counter_ms / 1000));
popup_set_text(
nfc_playlist->popup,
furi_string_get_cstr(tmp_counter_str),
64,
50,
AlignCenter,
AlignTop);
furi_delay_ms(50);
time_counter_ms -= 50;
};
}
}
}
stop_blink(nfc_playlist);
Expand All @@ -197,12 +270,12 @@ int32_t nfc_playlist_emulation_task(void* context) {
EmulationState == NfcPlaylistEmulationState_Canceled ? "Emulation stopped" :
"Emulation finished",
64,
10,
5,
AlignCenter,
AlignTop);
} else {
popup_set_header(
nfc_playlist->popup, "Failed to open playlist", 64, 10, AlignCenter, AlignTop);
nfc_playlist->popup, "Failed to open playlist", 64, 5, AlignCenter, AlignTop);
}
popup_set_text(nfc_playlist->popup, "Press back", 64, 50, AlignCenter, AlignTop);

Expand Down

0 comments on commit 0261767

Please sign in to comment.