Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <zephyr/sys/util.h>
#include "audio/audio_config.h"
#include "prop/radio_core.h"
#define BYTES_PER_STEREO_SAMPLE AUDIO_SPK_BYTES_PER_FRAME
/* Audio bytes stored in prop_packet.data. prop_packet.length adds PROP metadata. */
#define PROP_SPK_PACKET_BYTES (AUDIO_PROP_PACKET_MS * AUDIO_SPK_BYTES_PER_MS)
#define PROP_MIC_PACKET_BYTES (AUDIO_PROP_PACKET_MS * AUDIO_MIC_BYTES_PER_MS)
BUILD_ASSERT((AUDIO_SAMPLE_RATE_HZ % 1000U) == 0U,
"sample rate must support integer ms byte counts");
BUILD_ASSERT(AUDIO_SPK_TARGET_MS * 2U == AUDIO_SPK_BUFFER_MS,
"speaker target must be 50 percent of speaker buffer");
BUILD_ASSERT(PROP_SPK_PACKET_BYTES <= PROP_DATA_MAX_LEN,
"speaker data doesnt fit prop packet data section");
BUILD_ASSERT(PROP_MIC_PACKET_BYTES <= PROP_DATA_MAX_LEN,
"mic data doesnt fit prop packet data section");
BUILD_ASSERT((PROP_PACKET_METADATA_LEN + PROP_SPK_PACKET_BYTES) <=
PROP_PACKET_MAX_LEN,
"speaker frame length doesnt fit packet max length");
BUILD_ASSERT((PROP_PACKET_METADATA_LEN + PROP_MIC_PACKET_BYTES) <=
PROP_PACKET_MAX_LEN,
"mic frame length doesnt fit packet max length");
#define FILTER_ALPHA_NUM 1
#define FILTER_ALPHA_DEN 5
#define P_GAIN (1.25f)
#define P_TERM_MAX_HZ 400
#define FLL_ADJUST_MAX_HZ 800
#define P_KI (0.005f)
#define I_MAX_HZ 400
#define CTRL_DEBUG_LOG
#define CTRL_DEBUG_LOG_INTERVAL_MS 1000
#define WARN_SPK_LVL
#define WARN_COOLDOWN_MS 2000
#define EMA_FILTER_UPDATE_INTERVAL_MS 10
/* Shared FLL update throttling parameters. */
#define FLL_UPDATE_INTERVAL_MS 100
enum path_state {
PATH_STATE_BUFFERING = 0,
PATH_STATE_PLAYING,
};
struct fll_state {
bool fixed;
int32_t fixed_rate_hz;
};
struct codec_path_status {
enum path_state stream_state;
uint32_t spk_fifo_bytes;
uint32_t spk_pending_bytes;
uint32_t spk_filtered_level_bytes;
int32_t spk_error_bytes;
int32_t spk_p_adjust_hz;
int32_t spk_i_adjust_hz;
int32_t spk_fll_target_rate_hz;
uint32_t spk_underrun_events;
};
const char *path_get_state_name(enum path_state state);
uint32_t codec_level_filter_update(float *filtered, uint32_t level_bytes);
int32_t codec_clock_controller(struct codec_path_status *status, uint32_t target_bytes,
uint32_t nominal_rate_hz);
extern struct fll_state fll;
bool fll_set_fixed(int32_t rate_hz);
void fll_set_auto(void);
int32_t fll_get_fixed_rate(void);
3e4a9455bThis file is pinned to the selected release. Download the original to open it in your design tool.