リングバッファ

Ring Buffer

リングバッファは、データバッファとしての使用に加えて設計されており、オーディオ要素の接続にも使用されます。 リングバッファからデータを要求する各要素は、データが利用可能になるまでタスクをブロックします。 または、データを書き込んでいてバッファがいっぱいのときにタスクをブロックします。 もちろん、このブロックはいつでも停止できます。

Ringbuffer is designed in addition to use as a data buffer, also used to connect Audio Elements. Each Element that requests data from the Ringbuffer will block the task until the data is available. Or block the task when writing data and the Buffer is full. Of course, we can stop this block at any time.

Ring Buffer used in Audio Pipeline

アプリケーション例

Application Example

ほとんどのESP-ADFのでは、ElementsとRingbuffersの接続は、関数audio_pipeline_link()によって「舞台裏」で行われます。 この操作を確認するには、player/element_sdcard_mp3の例を確認してください。

In most of ESP-ADF examples connecting of Elements with Ringbuffers is done “behind the scenes” by a function audio_pipeline_link(). To see this operation exposed check player/element_sdcard_mp3 example.

APIリファレンス

API Reference

ヘッダーファイル

Header File

関数

Functions
ringbuf_handle_t rb_create(int block_size, int n_blocks)

合計サイズ= block_size * n_blocksでリングバッファを作成します。

Create ringbuffer with total size = block_size * n_blocks.

Return
ringbuf_handle_t
Parameters
  • block_size: 各ブロックのサイズ
    block_size: Size of each block
  • n_blocks: ブロック数
    n_blocks: Number of blocks

esp_err_t rb_destroy(ringbuf_handle_t rb)

ringbuf_handle_tによって作成されたすべてのメモリをクリーンアップして解放します。

Cleanup and free all memory created by ringbuf_handle_t.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

esp_err_t rb_abort(ringbuf_handle_t rb)

リングバッファの読み取りまたは書き込み用のスペースができるまで待機を中止します。

Abort waiting until there is space for reading or writing of the ringbuffer.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

esp_err_t rb_reset(ringbuf_handle_t rb)

リングバッファをリセットし、すべての値を初期状態としてクリアします。

Reset ringbuffer, clear all values as initial state.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

int rb_bytes_available(ringbuf_handle_t rb)

リングバッファの使用可能な合計バイト数を取得します。

Get total bytes available of Ringbuffer.

Return
使用可能な合計バイト数
total bytes available
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

int rb_bytes_filled(ringbuf_handle_t rb)

リングバッファを埋めたバイト数を取得します。

Get the number of bytes that have filled the ringbuffer.

Return
リングバッファを埋めたバイト数
The number of bytes that have filled the ringbuffer
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

int rb_get_size(ringbuf_handle_t rb)

リングバッファの合計サイズを取得します(バイト単位)

Get total size of Ringbuffer (in bytes)

Return
リングバッファの合計サイズ
total size of Ringbuffer
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

int rb_read(ringbuf_handle_t rb, char *buf, int len, TickType_t ticks_to_wait)

lenを使用してRingbufferからbufに読み取り、使用可能なringbufferバイトがlen未満の場合に読み取るのに十分なバイトになるまで、tick_to_waitティックを待機します。 提供されたbuf引数がNULLの場合、ringbufferは単にポインターを進めることによって疑似読み取りを実行します。

Read from Ringbuffer to buf with len and wait tick_to_wait ticks until enough bytes to read if the ringbuffer bytes available is less than len. If buf argument provided is NULL, then ringbuffer do pseudo reads by simply advancing pointers.

Return
Number of bytes read
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle
  • buf: データを読み取るためのバッファポインタ
    buf: The buffer pointer to read out data
  • len: 長さのリクエスト
    len: The length request
  • ticks_to_wait: 待つダニ
    ticks_to_wait: The ticks to wait

int rb_write(ringbuf_handle_t rb, char *buf, int len, TickType_t ticks_to_wait)

lenを使用してbufからRingbufferに書き込み、使用可能なリングバッファスペースがlen未満の場合は、書き込むのに十分なスペースになるまでtick_to_waitティックを待機します。

Write to Ringbuffer from buf with len and wait tick_to_wait ticks until enough space to write if the ringbuffer space available is less than len

Return
Number of bytes written
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle
  • buf: バッファ
    buf: The buffer
  • len: 長さ
    len: The length
  • ticks_to_wait: 待つダニ
    ticks_to_wait: The ticks to wait

esp_err_t rb_done_write(ringbuf_handle_t rb)

リングバッファへの書き込み状態の設定が完了しました。

Set status of writing to ringbuffer is done.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

esp_err_t rb_unblock_reader(ringbuf_handle_t rb)

rb_readからブロックを解除します。

Unblock from rb_read.

Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • rb: リングバッファハンドル
    rb: The Ringbuffer handle

マクロ

Macros
RB_OK
RB_FAIL
RB_DONE
RB_ABORT
RB_TIMEOUT

タイプ定義

Type Definitions
typedef struct ringbuf *ringbuf_handle_t