esp_app_trace_membufs_proto.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2020 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #ifndef ESP_APP_TRACE_MEMBUFS_PROTO_H_
  15. #define ESP_APP_TRACE_MEMBUFS_PROTO_H_
  16. #include "esp_app_trace_util.h"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. /** TRAX HW transport state */
  21. typedef struct {
  22. uint32_t in_block; // input block ID
  23. // TODO: change to uint16_t
  24. uint32_t markers[2]; // block filling level markers
  25. } esp_apptrace_membufs_state_t;
  26. /** memory block parameters,
  27. * should be packed, because it is read from the host */
  28. typedef struct {
  29. uint8_t *start; // start address
  30. uint32_t sz; // size
  31. } esp_apptrace_mem_block_t;
  32. typedef struct {
  33. esp_err_t (*swap_start)(uint32_t curr_block_id);
  34. esp_err_t (*swap)(uint32_t new_block_id);
  35. esp_err_t (*swap_end)(uint32_t new_block_id, uint32_t prev_block_len);
  36. bool (*host_data_pending)(void);
  37. } esp_apptrace_membufs_proto_hw_t;
  38. typedef struct {
  39. esp_apptrace_membufs_proto_hw_t * hw;
  40. volatile esp_apptrace_membufs_state_t state; // state
  41. esp_apptrace_mem_block_t blocks[2]; // memory blocks
  42. #if CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX > 0
  43. // ring buffer control struct for pending user blocks
  44. esp_apptrace_rb_t rb_pend;
  45. // storage for pending user blocks
  46. uint8_t pending_data[CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX + 1];
  47. #endif
  48. // ring buffer control struct for data from host (down buffer)
  49. esp_apptrace_rb_t rb_down;
  50. } esp_apptrace_membufs_proto_data_t;
  51. esp_err_t esp_apptrace_membufs_init(esp_apptrace_membufs_proto_data_t *proto, const esp_apptrace_mem_block_t blocks_cfg[2]);
  52. void esp_apptrace_membufs_down_buffer_config(esp_apptrace_membufs_proto_data_t *data, uint8_t *buf, uint32_t size);
  53. uint8_t *esp_apptrace_membufs_down_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t *size, esp_apptrace_tmo_t *tmo);
  54. esp_err_t esp_apptrace_membufs_down_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
  55. uint8_t *esp_apptrace_membufs_up_buffer_get(esp_apptrace_membufs_proto_data_t *proto, uint32_t size, esp_apptrace_tmo_t *tmo);
  56. esp_err_t esp_apptrace_membufs_up_buffer_put(esp_apptrace_membufs_proto_data_t *proto, uint8_t *ptr, esp_apptrace_tmo_t *tmo);
  57. esp_err_t esp_apptrace_membufs_flush_nolock(esp_apptrace_membufs_proto_data_t *proto, uint32_t min_sz, esp_apptrace_tmo_t *tmo);
  58. #ifdef __cplusplus
  59. }
  60. #endif
  61. #endif