205 lines
5.2 KiB
C
205 lines
5.2 KiB
C
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
#ifndef __aud_section_h__
|
|
#define __aud_section_h__
|
|
|
|
#include "section_def.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define aud_section_debug
|
|
#ifdef aud_section_debug
|
|
#define aud_trace TRACE
|
|
#else
|
|
#define aud_trace(...)
|
|
#endif
|
|
#include "hal_aud.h"
|
|
#define audsec_tag "audsec_tag"
|
|
|
|
#define aud_section_magic 0xdad1
|
|
#define aud_section_struct_version 1
|
|
|
|
#define AUD_COEF_LEN (500)
|
|
#if (AUD_SECTION_STRUCT_VERSION == 1)
|
|
#define AUD_IIR_NUM (6)
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 2)
|
|
#define AUD_IIR_NUM (8)
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 3)
|
|
#define AUD_IIR_NUM (8)
|
|
#else
|
|
#error "Can not support this version!!!"
|
|
#endif
|
|
|
|
typedef struct _anc_rir_coefs {
|
|
int32_t coef_b[3];
|
|
int32_t coef_a[3];
|
|
} anc_iir_coefs;
|
|
|
|
typedef struct _aud_item {
|
|
int32_t total_gain;
|
|
|
|
uint16_t iir_bypass_flag;
|
|
uint16_t iir_counter;
|
|
anc_iir_coefs iir_coef[AUD_IIR_NUM];
|
|
|
|
#if (AUD_SECTION_STRUCT_VERSION == 1)
|
|
uint16_t fir_bypass_flag;
|
|
uint16_t fir_len;
|
|
int16_t fir_coef[AUD_COEF_LEN];
|
|
int8_t pos_tab[16];
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 2)
|
|
int32_t reserved_for_drc[32];
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 3)
|
|
|
|
#endif
|
|
int16_t reserved1;
|
|
int8_t dac_gain_offset; // in qdb (quater of dB)
|
|
int8_t adc_gain_offset; // in qdb (quater of dB)
|
|
} aud_item;
|
|
|
|
typedef struct {
|
|
#if (AUD_SECTION_STRUCT_VERSION == 1)
|
|
aud_item anc_cfg_ff_l;
|
|
aud_item anc_cfg_ff_r;
|
|
aud_item anc_cfg_fb_l;
|
|
aud_item anc_cfg_fb_r;
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 2)
|
|
aud_item anc_cfg_ff_l;
|
|
aud_item anc_cfg_ff_r;
|
|
aud_item anc_cfg_fb_l;
|
|
aud_item anc_cfg_fb_r;
|
|
|
|
aud_item anc_cfg_tt_l;
|
|
aud_item anc_cfg_tt_r;
|
|
aud_item anc_cfg_mc_l;
|
|
aud_item anc_cfg_mc_r;
|
|
#elif (AUD_SECTION_STRUCT_VERSION == 3)
|
|
aud_item anc_cfg_ff_l;
|
|
aud_item anc_cfg_fb_l;
|
|
aud_item anc_cfg_tt_l;
|
|
aud_item anc_cfg_mc_l;
|
|
#endif
|
|
|
|
} struct_anc_cfg;
|
|
|
|
enum ANC_INDEX {
|
|
ANC_INDEX_0 = 0,
|
|
ANC_INDEX_1,
|
|
ANC_INDEX_2,
|
|
ANC_INDEX_3,
|
|
ANC_INDEX_TOTAL,
|
|
};
|
|
|
|
typedef struct {
|
|
unsigned char anc_ver[16];
|
|
unsigned char batch_info[16];
|
|
unsigned char serial[16];
|
|
} anc_ident;
|
|
|
|
enum auditem_sample_enum_t {
|
|
#if (AUD_SECTION_STRUCT_VERSION == 3)
|
|
PCTOOL_SAMPLERATE_48X8K,
|
|
#else
|
|
PCTOOL_SAMPLERATE_44_1X8K,
|
|
PCTOOL_SAMPLERATE_48X8K,
|
|
PCTOOL_SAMPLERATE_50_7X8K = PCTOOL_SAMPLERATE_48X8K,
|
|
#endif
|
|
PCTOOL_AUDITEM_SAMPLERATE_COUNT
|
|
};
|
|
|
|
typedef struct {
|
|
struct_anc_cfg anc_cfg[PCTOOL_AUDITEM_SAMPLERATE_COUNT];
|
|
} pctool_struct_anc_cfg;
|
|
|
|
#if (AUD_SECTION_STRUCT_VERSION == 3)
|
|
#define PCTOOL_ANC_APPMODE_COUNT 15
|
|
#define ANC_SECTIONE_SIZE (16*1024)
|
|
#else
|
|
#define PCTOOL_ANC_APPMODE_COUNT 4
|
|
#define ANC_SECTIONE_SIZE (64*1024)
|
|
#endif
|
|
|
|
typedef struct {
|
|
pctool_struct_anc_cfg anc_config_arr[PCTOOL_ANC_APPMODE_COUNT];
|
|
} pctool_anc_config_t;
|
|
|
|
#define PCTOOL_AUDSEC_RESERVED_LEN (ANC_SECTIONE_SIZE -sizeof(section_head_t) - sizeof(anc_ident) - sizeof(pctool_anc_config_t))
|
|
|
|
typedef struct {
|
|
anc_ident ancIdent;
|
|
pctool_anc_config_t anc_config;
|
|
unsigned char reserved[PCTOOL_AUDSEC_RESERVED_LEN];
|
|
} audsec_body;
|
|
|
|
typedef struct {
|
|
section_head_t sec_head;
|
|
audsec_body sec_body;
|
|
} pctool_aud_section;
|
|
|
|
typedef struct {
|
|
uint8_t io_pin;
|
|
uint8_t set_flag;
|
|
} pctool_iocfg;
|
|
/*
|
|
typedef struct{
|
|
uint8_t digmic_ck_iomux_pin;
|
|
uint8_t digmic_d0_iomux_pin;
|
|
uint8_t digmic_d1_iomux_pin;
|
|
uint8_t digmic_d2_iomux_pin;
|
|
uint8_t digmic_phase;
|
|
}digital_mic_cfg;
|
|
*/
|
|
|
|
// Add audio and speech support
|
|
#define AUDIO_SECTION_DEBUG
|
|
|
|
// Device
|
|
#define AUDIO_SECTION_DEVICE_ANC (0)
|
|
#define AUDIO_SECTION_DEVICE_AUDIO (1)
|
|
#define AUDIO_SECTION_DEVICE_SPEECH (2)
|
|
#define AUDIO_SECTION_DEVICE_NUM (3)
|
|
|
|
// If add device, need add length to section_device_length
|
|
#define AUDIO_SECTION_LENGTH_ANC (1024*8)
|
|
#define AUDIO_SECTION_LENGTH_AUDIO (1024*8)
|
|
#define AUDIO_SECTION_LENGTH_SPEECH (1024*8)
|
|
|
|
#define AUDIO_SECTION_CFG_RESERVED_LEN (sizeof(audio_section_t))
|
|
|
|
typedef struct {
|
|
section_head_t head;
|
|
uint32_t device;
|
|
uint32_t cfg_len;
|
|
} audio_section_t;
|
|
|
|
// README: Important!!!!!!
|
|
// App cfg struecture must define reserved like follow:
|
|
// typedef struct {
|
|
// uint8_t reserved[AUDIO_SECTION_CFG_RESERVED_LEN];
|
|
// custom_cfg_t custom_cfg;
|
|
// } audio_section_custom_cfg_t;
|
|
|
|
int audio_section_store_cfg(uint32_t device, uint8_t *cfg, uint32_t len);
|
|
int audio_section_load_cfg(uint32_t device, uint8_t *cfg, uint32_t len);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|