mifare_fuzzer_worker.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "mifare_fuzzer_worker.h"
  2. /// @brief mifare_fuzzer_worker_alloc()
  3. /// @return
  4. MifareFuzzerWorker* mifare_fuzzer_worker_alloc() {
  5. MifareFuzzerWorker* mifare_fuzzer_worker = malloc(sizeof(MifareFuzzerWorker));
  6. // Worker thread attributes
  7. mifare_fuzzer_worker->thread = furi_thread_alloc_ex(
  8. "MifareFuzzerWorker", 8192, mifare_fuzzer_worker_task, mifare_fuzzer_worker);
  9. mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
  10. return mifare_fuzzer_worker;
  11. }
  12. /// @brief mifare_fuzzer_worker_free()
  13. /// @param mifare_fuzzer_worker
  14. void mifare_fuzzer_worker_free(MifareFuzzerWorker* mifare_fuzzer_worker) {
  15. furi_assert(mifare_fuzzer_worker);
  16. furi_thread_free(mifare_fuzzer_worker->thread);
  17. free(mifare_fuzzer_worker);
  18. }
  19. /// @brief mifare_fuzzer_worker_stop()
  20. /// @param mifare_fuzzer_worker
  21. void mifare_fuzzer_worker_stop(MifareFuzzerWorker* mifare_fuzzer_worker) {
  22. furi_assert(mifare_fuzzer_worker);
  23. if(mifare_fuzzer_worker->state != MifareFuzzerWorkerStateStop) {
  24. mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
  25. furi_thread_join(mifare_fuzzer_worker->thread);
  26. }
  27. }
  28. /// @brief mifare_fuzzer_worker_start()
  29. /// @param mifare_fuzzer_worker
  30. void mifare_fuzzer_worker_start(MifareFuzzerWorker* mifare_fuzzer_worker) {
  31. furi_assert(mifare_fuzzer_worker);
  32. mifare_fuzzer_worker->state = MifareFuzzerWorkerStateEmulate;
  33. furi_thread_start(mifare_fuzzer_worker->thread);
  34. }
  35. /// @brief mifare_fuzzer_worker_task()
  36. /// @param context
  37. /// @return
  38. int32_t mifare_fuzzer_worker_task(void* context) {
  39. MifareFuzzerWorker* mifare_fuzzer_worker = context;
  40. if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
  41. FuriHalNfcDevData params = mifare_fuzzer_worker->nfc_dev_data;
  42. furi_hal_nfc_exit_sleep();
  43. while(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
  44. furi_hal_nfc_listen(params.uid, params.uid_len, params.atqa, params.sak, false, 500);
  45. furi_delay_ms(50);
  46. }
  47. furi_hal_nfc_sleep();
  48. }
  49. mifare_fuzzer_worker->state = MifareFuzzerWorkerStateStop;
  50. return 0;
  51. }
  52. /// @brief mifare_fuzzer_worker_is_emulating()
  53. /// @param mifare_fuzzer_worker
  54. /// @return
  55. bool mifare_fuzzer_worker_is_emulating(MifareFuzzerWorker* mifare_fuzzer_worker) {
  56. if(mifare_fuzzer_worker->state == MifareFuzzerWorkerStateEmulate) {
  57. return true;
  58. }
  59. return false;
  60. }
  61. /// @brief mifare_fuzzer_worker_set_nfc_dev_data()
  62. /// @param mifare_fuzzer_worker
  63. /// @param nfc_dev_data
  64. void mifare_fuzzer_worker_set_nfc_dev_data(
  65. MifareFuzzerWorker* mifare_fuzzer_worker,
  66. FuriHalNfcDevData nfc_dev_data) {
  67. mifare_fuzzer_worker->nfc_dev_data = nfc_dev_data;
  68. }
  69. /// @brief mifare_fuzzer_worker_get_nfc_dev_data()
  70. /// @param mifare_fuzzer_worker
  71. /// @return
  72. FuriHalNfcDevData mifare_fuzzer_worker_get_nfc_dev_data(MifareFuzzerWorker* mifare_fuzzer_worker) {
  73. return mifare_fuzzer_worker->nfc_dev_data;
  74. }