uhf_worker.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "uhf_worker.h"
  2. #include "uhf_data.h"
  3. int32_t uhf_worker_task(void* ctx) {
  4. UNUSED(ctx);
  5. FURI_LOG_E("uhf_worker", "worker callback has been called");
  6. return 0;
  7. }
  8. UHFWorker* uhf_worker_alloc() {
  9. UHFWorker* uhf_worker = (UHFWorker*)malloc(sizeof(UHFWorker));
  10. uhf_worker->thread = furi_thread_alloc_ex("UHFWorker", 8 * 1024, uhf_worker_task, uhf_worker);
  11. uhf_worker->data = uhf_response_data_alloc();
  12. uhf_worker->callback = NULL;
  13. uhf_worker->ctx = NULL;
  14. return uhf_worker;
  15. }
  16. void uhf_worker_change_state(UHFWorker* worker, UHFWorkerState state) {
  17. worker->state = state;
  18. }
  19. void uhf_worker_start(
  20. UHFWorker* uhf_worker,
  21. UHFWorkerState state,
  22. UHFWorkerCallback callback,
  23. void* ctx) {
  24. uhf_worker->state = state;
  25. uhf_worker->callback = callback;
  26. uhf_worker->ctx = ctx;
  27. furi_thread_start(uhf_worker->thread);
  28. }
  29. void uhf_worker_stop(UHFWorker* uhf_worker) {
  30. furi_assert(uhf_worker);
  31. furi_assert(uhf_worker->thread);
  32. if(furi_thread_get_state(uhf_worker->thread) != FuriThreadStateStopped) {
  33. uhf_worker_change_state(uhf_worker, UHFWorkerStateStop);
  34. furi_thread_join(uhf_worker->thread);
  35. }
  36. }
  37. void uhf_worker_free(UHFWorker* uhf_worker) {
  38. furi_assert(uhf_worker);
  39. furi_thread_free(uhf_worker->thread);
  40. uhf_data_free((UHFData*)uhf_worker->data);
  41. free(uhf_worker);
  42. }