Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorあく <alleteam@gmail.com>2022-02-19 02:38:44 +0300
committerGitHub <noreply@github.com>2022-02-19 02:38:44 +0300
commit3c77ae2eb88db05e4bc8a51c7a0dbd64943c0f9f (patch)
tree17aabab1eb9e2c7a5fe1e9b5edbe65fe88083a29 /applications/nfc/nfc_worker.c
parentddd909faa0f114172c4c9ebff427130afd5762ac (diff)
Nfc: replace cmsis thread with furi, fix condition race in thread stop routine. (#1003)
* Nfc: replace cmsis thread with furi, fix condition race on thread stop routine. * Nfc: fix memory leak * FuriCore, CMSIS: properly handle thread names before scheduler start
Diffstat (limited to 'applications/nfc/nfc_worker.c')
-rwxr-xr-xapplications/nfc/nfc_worker.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/applications/nfc/nfc_worker.c b/applications/nfc/nfc_worker.c
index 2056fd9f..25c38832 100755
--- a/applications/nfc/nfc_worker.c
+++ b/applications/nfc/nfc_worker.c
@@ -9,11 +9,17 @@
NfcWorker* nfc_worker_alloc() {
NfcWorker* nfc_worker = malloc(sizeof(NfcWorker));
+
// Worker thread attributes
- nfc_worker->thread_attr.name = "NfcWorker";
- nfc_worker->thread_attr.stack_size = 8192;
+ nfc_worker->thread = furi_thread_alloc();
+ furi_thread_set_name(nfc_worker->thread, "NfcWorker");
+ furi_thread_set_stack_size(nfc_worker->thread, 8192);
+ furi_thread_set_callback(nfc_worker->thread, nfc_worker_task);
+ furi_thread_set_context(nfc_worker->thread, nfc_worker);
+
nfc_worker->callback = NULL;
nfc_worker->context = NULL;
+
// Initialize rfal
while(furi_hal_nfc_is_busy()) {
osDelay(10);
@@ -25,6 +31,7 @@ NfcWorker* nfc_worker_alloc() {
void nfc_worker_free(NfcWorker* nfc_worker) {
furi_assert(nfc_worker);
+ furi_thread_free(nfc_worker->thread);
free(nfc_worker);
}
@@ -48,7 +55,7 @@ void nfc_worker_start(
nfc_worker->context = context;
nfc_worker->dev_data = dev_data;
nfc_worker_change_state(nfc_worker, state);
- nfc_worker->thread = osThreadNew(nfc_worker_task, nfc_worker, &nfc_worker->thread_attr);
+ furi_thread_start(nfc_worker->thread);
}
void nfc_worker_stop(NfcWorker* nfc_worker) {
@@ -58,6 +65,7 @@ void nfc_worker_stop(NfcWorker* nfc_worker) {
}
furi_hal_nfc_stop();
nfc_worker_change_state(nfc_worker, NfcWorkerStateStop);
+ furi_thread_join(nfc_worker->thread);
}
void nfc_worker_change_state(NfcWorker* nfc_worker, NfcWorkerState state) {
@@ -66,7 +74,7 @@ void nfc_worker_change_state(NfcWorker* nfc_worker, NfcWorkerState state) {
/***************************** NFC Worker Thread *******************************/
-void nfc_worker_task(void* context) {
+int32_t nfc_worker_task(void* context) {
NfcWorker* nfc_worker = context;
furi_hal_power_insomnia_enter();
@@ -92,7 +100,8 @@ void nfc_worker_task(void* context) {
furi_hal_nfc_deactivate();
nfc_worker_change_state(nfc_worker, NfcWorkerStateReady);
furi_hal_power_insomnia_exit();
- osThreadExit();
+
+ return 0;
}
void nfc_worker_detect(NfcWorker* nfc_worker) {