uhf_data.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include <furi.h>
  2. #include "uhf_data.h"
  3. UHFData* uhf_data_alloc() {
  4. UHFData* uhf_data = (UHFData*)malloc(sizeof(UHFData));
  5. uhf_data->length = 0;
  6. uhf_data->start = false;
  7. uhf_data->end = false;
  8. uhf_data->next = NULL;
  9. return uhf_data;
  10. }
  11. int uhf_data_append(UHFData* uhf_data, uint8_t data) {
  12. if(data == 0xBB) {
  13. uhf_data->start = true;
  14. }
  15. if(!uhf_data->start) return 0;
  16. if(uhf_data->end) return 0;
  17. if(uhf_data->length >= MAX_DATA_SIZE) return 0;
  18. if(data == 0x7E) {
  19. uhf_data->end = true;
  20. }
  21. uhf_data->data[uhf_data->length++] = data;
  22. return 1;
  23. }
  24. void uhf_data_reset(UHFData* uhf_data) {
  25. for(size_t i = 0; i < uhf_data->length; i++) {
  26. uhf_data->data[i] = 0x00;
  27. }
  28. uhf_data->start = false;
  29. uhf_data->end = false;
  30. uhf_data->length = 0;
  31. uhf_data->next = NULL;
  32. }
  33. void uhf_data_free(UHFData* uhf_data) {
  34. if(uhf_data == NULL) return;
  35. while(uhf_data != NULL) {
  36. UHFData* next = uhf_data->next;
  37. free(uhf_data);
  38. uhf_data = next;
  39. }
  40. }
  41. UHFResponseData* uhf_response_data_alloc() {
  42. UHFResponseData* uhf_response_data = (UHFResponseData*)malloc(sizeof(UHFResponseData));
  43. uhf_response_data->head = uhf_data_alloc();
  44. uhf_response_data->tail = uhf_response_data->head;
  45. uhf_response_data->size = 1;
  46. return uhf_response_data;
  47. }
  48. UHFData* uhf_response_data_add_new_uhf_data(UHFResponseData* uhf_response_data) {
  49. UHFData* temp = uhf_response_data->head;
  50. while(temp->next != NULL) {
  51. temp = temp->next;
  52. }
  53. temp->next = uhf_data_alloc();
  54. uhf_response_data->size++;
  55. uhf_response_data->tail = temp->next;
  56. return temp->next;
  57. }
  58. UHFData* uhf_response_data_get_uhf_data(UHFResponseData* uhf_response_data, uint index) {
  59. if(uhf_response_data == NULL || uhf_response_data->size <= index) return NULL;
  60. UHFData* uhf_data = uhf_response_data->head;
  61. if(index == 0) return uhf_data;
  62. while(uhf_data != NULL && index >= 1) {
  63. uhf_data = uhf_data->next;
  64. index--;
  65. }
  66. return uhf_data;
  67. }
  68. void uhf_response_data_reset(UHFResponseData* uhf_response_data) {
  69. uhf_data_reset(uhf_response_data->head);
  70. if(uhf_response_data->size == 1) {
  71. return;
  72. }
  73. uhf_data_free(uhf_response_data->head->next);
  74. uhf_response_data->size = 1;
  75. }
  76. void uhf_response_data_free(UHFResponseData* uhf_response_data) {
  77. uhf_data_free(uhf_response_data->head);
  78. free(uhf_response_data);
  79. }