Files

102 lines
2.4 KiB
C
Raw Permalink Normal View History

2026-02-15 02:48:59 +09:00
#include "codec_board.h"
#include "esp_log.h"
#define TAG "BOARD"
board_section_t *get_codec_section(const char *codec_type);
static board_section_t *codec;
#define RET_ON_NOT_INIT() if (codec == NULL) { \
return -1; \
}
void set_codec_board_type(const char *codec_type)
{
if (codec) {
return;
}
codec = get_codec_section(codec_type);
}
int get_sdcard_config(sdcard_cfg_t *card_cfg)
{
RET_ON_NOT_INIT();
if (codec->sdcard_num == 0) {
ESP_LOGE(TAG, "Sdcard not exits on board");
return -1;
}
memcpy(card_cfg, &codec->sdcard, sizeof(sdcard_cfg_t));
return 0;
}
int get_i2c_pin(uint8_t port, codec_i2c_pin_t *i2c_pin)
{
RET_ON_NOT_INIT();
if (port > codec->i2c_num) {
ESP_LOGE(TAG, "I2C %d not exits on board", port);
return -1;
}
memcpy(i2c_pin, &codec->i2c_pin[port], sizeof(codec_i2c_pin_t));
return 0;
}
int get_i2s_pin(uint8_t port, codec_i2s_pin_t *i2s_pin)
{
RET_ON_NOT_INIT();
if (port > codec->i2s_num) {
ESP_LOGE(TAG, "I2S %d not exits on board", port);
return -1;
}
memcpy(i2s_pin, &codec->i2s_pin[port], sizeof(codec_i2s_pin_t));
return 0;
}
int get_out_codec_cfg(codec_cfg_t *out_cfg)
{
RET_ON_NOT_INIT();
for (int i = 0; i < codec->codec_num; i++) {
if (codec->codec[i].codec_dir & CODEC_DIR_OUT) {
memcpy(out_cfg, &codec->codec[i].codec_cfg, sizeof(codec_cfg_t));
return 0;
}
}
ESP_LOGE(TAG, "Output codec not exits on board");
return -1;
}
int get_in_codec_cfg(codec_cfg_t *in_cfg)
{
RET_ON_NOT_INIT();
for (int i = 0; i < codec->codec_num; i++) {
if (codec->codec[i].codec_dir & CODEC_DIR_IN) {
memcpy(in_cfg, &codec->codec[i].codec_cfg, sizeof(codec_cfg_t));
return 0;
}
}
ESP_LOGE(TAG, "Input codec not exits on board");
return -1;
}
int get_camera_cfg(camera_cfg_t *cam_cfg)
{
RET_ON_NOT_INIT();
if (codec->camera_num == 0) {
ESP_LOGE(TAG, "Camera not exits on board");
return -1;
}
memcpy(cam_cfg, &codec->camera, sizeof(camera_cfg_t));
return 0;
}
int get_lcd_cfg(lcd_cfg_t *lcd_cfg)
{
RET_ON_NOT_INIT();
if (codec->lcd_num) {
memcpy(lcd_cfg, &codec->lcd, sizeof(lcd_cfg_t));
return 0;
}
ESP_LOGE(TAG, "LCD not exits on board");
return -1;
}