102 lines
2.4 KiB
C
102 lines
2.4 KiB
C
|
|
#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;
|
||
|
|
}
|