mifare_fuzzer_worker.c 3.0 KB

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