esp_app_trace_membufs_proto.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #ifndef ESP_APP_TRACE_MEMBUFS_PROTO_H_
  7. #define ESP_APP_TRACE_MEMBUFS_PROTO_H_
  8. #include "esp_app_trace_util.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /** TRAX HW transport state */
  13. typedef struct {
  14. uint32_t in_block; // input block ID
  15. // TODO: change to uint16_t
  16. uint32_t markers[2]; // block filling level markers
  17. } esp_apptrace_membufs_state_t;
  18. /** memory block parameters,
  19. * should be packed, because it is read from the host */
  20. typedef struct {
  21. uint8_t *start; // start address
  22. uint32_t sz; // size
  23. } esp_apptrace_mem_block_t;
  24. typedef struct {
  25. esp_err_t (*swap_start)(uint32_t curr_block_id);
  26. esp_err_t (*swap)(uint32_t new_block_id);
  27. esp_err_t (*swap_end)(uint32_t new_block_id, uint32_t prev_block_len);
  28. bool (*host_data_pending)(void);
  29. } esp_apptrace_membufs_proto_hw_t;
  30. typedef struct {
  31. esp_apptrace_membufs_proto_hw_t * hw;
  32. volatile esp_apptrace_membufs_state_t state; // state
  33. esp_apptrace_mem_block_t blocks[2]; // memory blocks
  34. #if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
  35. // ring buffer control struct for pending user blocks
  36. esp_apptrace_rb_t rb_pend;
  37. // storage for pending user blocks
  38. uint8_t pending_data[CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX + 1];
  39. #endif
  40. // ring buffer control struct for data from host (down buffer)
  41. esp_apptrace_rb_t rb_down;
  42. } esp_apptrace_membufs_proto_data_t;
  43. esp_err_t esp_apptrace_membufs_init(esp_apptrace_membufs_proto_data_t *proto, const esp_apptrace_mem_block_t blocks_cfg[2]);
  44. void esp_apptrace_membufs_down_buffer_config(esp_apptrace_membufs_proto_data_t *data, uint8_t *buf, uint32_t size);
  45. uint8_t *esp_apptrace_membufs_down_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t *size, esp_apptrace_tmo_t *tmo);
  46. esp_err_t esp_apptrace_membufs_down_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
  47. uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t size, esp_apptrace_tmo_t *tmo);
  48. esp_err_t esp_apptrace_membufs_up_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
  49. esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *proto, uint32_t min_sz, esp_apptrace_tmo_t *tmo);
  50. #ifdef __cplusplus
  51. }
  52. #endif
  53. #endif