uhf_data.c 2.4 KB

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