mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-26 03:39:58 -07:00
89 lines
2.9 KiB
C
89 lines
2.9 KiB
C
|
|
#include "mifare_fuzzer_worker.h"
|
|
|
|
/// @brief mifare_fuzzer_worker_alloc()
|
|
/// @return
|
|
MifareFuzzerWorker* mifare_fuzzer_worker_alloc() {
|
|
MifareFuzzerWorker* mifare_fuzzer_worker = malloc(sizeof(MifareFuzzerWorker));
|
|
// Worker thread attributes
|
|
mifare_fuzzer_worker->thread = furi_thread_alloc_ex(
|
|
"MifareFuzzerWorker", 8192, mifare_fuzzer_worker_task, mifare_fuzzer_worker);
|
|
mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
|
|
return mifare_fuzzer_worker;
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_free()
|
|
/// @param mifare_fuzzer_worker
|
|
void mifare_fuzzer_worker_free(MifareFuzzerWorker* mifare_fuzzer_worker) {
|
|
furi_assert(mifare_fuzzer_worker);
|
|
furi_thread_free(mifare_fuzzer_worker->thread);
|
|
free(mifare_fuzzer_worker);
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_stop()
|
|
/// @param mifare_fuzzer_worker
|
|
void mifare_fuzzer_worker_stop(MifareFuzzerWorker* mifare_fuzzer_worker) {
|
|
furi_assert(mifare_fuzzer_worker);
|
|
if(mifare_fuzzer_worker->state != MifareFuzzerWorkerStateStop) {
|
|
mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
|
|
furi_thread_join(mifare_fuzzer_worker->thread);
|
|
}
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_start()
|
|
/// @param mifare_fuzzer_worker
|
|
void mifare_fuzzer_worker_start(MifareFuzzerWorker* mifare_fuzzer_worker) {
|
|
furi_assert(mifare_fuzzer_worker);
|
|
mifare_fuzzer_worker->state = MifareFuzzerWorkerStateEmulate;
|
|
furi_thread_start(mifare_fuzzer_worker->thread);
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_task()
|
|
/// @param context
|
|
/// @return
|
|
int32_t mifare_fuzzer_worker_task(void* context) {
|
|
MifareFuzzerWorker* mifare_fuzzer_worker = context;
|
|
|
|
if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
|
|
FuriHalNfcDevData params = mifare_fuzzer_worker->nfc_dev_data;
|
|
|
|
furi_hal_nfc_exit_sleep();
|
|
while(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
|
|
furi_hal_nfc_listen(
|
|
params.uid, params.uid_len, params.a_data.atqa, params.a_data.sak, false, 500);
|
|
furi_delay_ms(50);
|
|
}
|
|
furi_hal_nfc_sleep();
|
|
}
|
|
|
|
mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
|
|
|
|
return 0;
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_is_emulating()
|
|
/// @param mifare_fuzzer_worker
|
|
/// @return
|
|
bool mifare_fuzzer_worker_is_emulating(MifareFuzzerWorker* mifare_fuzzer_worker) {
|
|
if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_set_nfc_dev_data()
|
|
/// @param mifare_fuzzer_worker
|
|
/// @param nfc_dev_data
|
|
void mifare_fuzzer_worker_set_nfc_dev_data(
|
|
MifareFuzzerWorker* mifare_fuzzer_worker,
|
|
FuriHalNfcDevData nfc_dev_data) {
|
|
mifare_fuzzer_worker->nfc_dev_data = nfc_dev_data;
|
|
}
|
|
|
|
/// @brief mifare_fuzzer_worker_get_nfc_dev_data()
|
|
/// @param mifare_fuzzer_worker
|
|
/// @return
|
|
FuriHalNfcDevData mifare_fuzzer_worker_get_nfc_dev_data(MifareFuzzerWorker* mifare_fuzzer_worker) {
|
|
return mifare_fuzzer_worker->nfc_dev_data;
|
|
}
|