summaryrefslogtreecommitdiff
path: root/src/audio/fatfs_audio_input.cpp
blob: 1e8c35b8a98e155fdea8d79296fb774337187eda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "fatfs_audio_input.hpp"
#include <memory>

#include "esp-adf/components/input_key_service/include/input_key_service.h"
#include "esp_heap_caps.h"

#include "audio_element.hpp"

namespace audio {

static const size_t kQueueItems = 0;
static constexpr size_t kQueueItemSize = sizeof(IAudioElement::Command);
static constexpr size_t kQueueSize = kQueueItems * kQueueItemSize;

static const size_t kOutputBufferSize = 1024;

FatfsAudioInput::FatfsAudioInput(std::shared_ptr<drivers::SdStorage> storage)
    : IAudioElement(), storage_(storage) {
  input_queue_memory_ = heap_caps_malloc(kQueueSize, MALLOC_CAP_SPIRAM);
  input_queue_ = xQueueCreateStatic(
      kQueueItems, kQueueItemSize, input_queue_memory_, &input_queue_metadata_);

  output_queue_memory_ = heap_caps_malloc(kQueueSize, MALLOC_CAP_SPIRAM);
  output_queue_ =
      xQueueCreateStatic(kQueueItems, kQueueItemSize, output_queue_memory_,
                         &output_queue_metadata_);

  output_buffer_memory_ =
      heap_caps_malloc(kOutputBufferSize, MALLOC_CAP_SPIRAM);
  output_buffer_ =
      xStreamBufferCreateStatic(kOutputBufferSize - 1, 1, output_buffer_memory_,
                                &output_buffer_metadata_);
}

FatfsAudioInput::~FatfsAudioInput() {
  vStreamBufferDelete(output_buffer_);
  free(output_buffer_memory_);
  vQueueDelete(output_queue_);
  free(output_queue_memory_);
  vQueueDelete(input_queue_);
  free(input_queue_memory_);
}

auto FatfsAudioInput::InputCommandQueue() -> QueueHandle_t {
  return input_queue_;
}

auto FatfsAudioInput::OutputCommandQueue() -> QueueHandle_t {
  return output_queue_;
}

auto FatfsAudioInput::InputBuffer() -> StreamBufferHandle_t {
  return nullptr;
}

auto FatfsAudioInput::OutputBuffer() -> StreamBufferHandle_t {
  return output_buffer_;
}

auto FatfsAudioInput::ProcessElementCommand(void* command) -> void {
  InputCommand *real = std::reinterpret_pointer_cast<input_key_service_add_key*>(command);

  // TODO.
}

auto FatfsAudioInput::SkipElementCommand(void* command) -> void {
  InputCommand *real = std::reinterpret_pointer_cast<input_key_service_add_key*>(command);
  delete real;
}

auto FatfsAudioInput::ProcessData(uint8_t* data, uint16_t length) -> void {
  // Not implemented.
}

auto FatfsAudioInput::ProcessIdle() -> void {
  // TODO.
}

}  // namespace audio