summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d858f69)
raw | patch | inline | side by side (parent: d858f69)
author | Ming Wei <a0868762@ti.com> | |
Wed, 18 Jan 2017 00:02:59 +0000 (18:02 -0600) | ||
committer | Ming Wei <a0868762@ti.com> | |
Wed, 18 Jan 2017 00:02:59 +0000 (18:02 -0600) |
Signed-off-by: Ming Wei <a0868762@ti.com>
index ae625868506f713dc32a301ec9ed0ac20b4a1daf..80a68d07c05cbcd8aaf17225de89eeef8aaeded9 100644 (file)
--- a/common/components/sys.c
+++ b/common/components/sys.c
sysContext.use_fileio = cfg->use_fileio; /* probably FALSE since slow */\r
sysContext.eof = FALSE; /* no EOF reached yet */\r
sysContext.use_default = cfg->use_default; /* TRUE for default vmic angles */\r
+ for (k = 0; k < 3; k++) {\r
+ sysContext.asnr_attn[k] = cfg->asnr_attn[k];\r
+ }\r
+ sysContext.asnr_delay = cfg->asnr_delay;\r
+ sysContext.asnr_enable = cfg->asnr_enable;\r
+ sysContext.vad_enable = cfg->vad_enable;\r
+ sysContext.drc_exp_knee = cfg->drc_exp_knee;\r
+ sysContext.drc_max_amp = cfg->drc_max_amp;\r
+ sysContext.drc_enable = cfg->drc_enable;\r
\r
/* Initialize input buffer pointers and read portion */\r
sysContext.in_lo = &sysInBuf[0]; /* Input buffer start (Low part) */\r
sysContext.in_hi = &sysInBuf[SYS_IN_SIZE/2]; /* High part of input buffer */\r
sysContext.in_w = sysContext.in_lo; /* Write pointer */\r
sysContext.in_r = sysContext.in_hi; /* Read pointer */\r
- memset(sysContext.in_r, 0xBA, SYS_IN_SIZE/2); /* Initial the read portion */\r
+ memset(sysContext.in_r, 0xBA, SYS_IN_SIZE/2); /* Initialize the read portion */\r
\r
/* Clear instance pointers */\r
for (k = 0; k < SYS_VMICS_MAX; k++) {\r
\r
int sysHeapAlloc(void *bd_in, tint reset)\r
{\r
+ int err = SYS_ERR_SUCCESS;\r
tuint size;\r
void *handle;\r
tword *base_w;\r
\r
bd_p->base = base_w; /* store the bsae address for a buffer */\r
\r
- return(SYS_ERR_SUCCESS);\r
+ if (base_w == NULL) {\r
+ err = SYS_ERR_NOMEMORY;\r
+ }\r
+ return(err);\r
} /* sysHeapAlloc */\r
\r
/*=================================================================\r
index d0fa142bda91aebcce35c2ce7eca30f583d70b92..4a241721700b29e7faa75d94edf99aecc07573f1 100644 (file)
--- a/common/components/sys.h
+++ b/common/components/sys.h
/*
- * Copyright (c) 2016, Texas Instruments Incorporated
+ * Copyright (c) 2017, Texas Instruments Incorporated\r
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
#define SYS_FRAME_SIZE (TYP_LINSAMPLE_SIZE*SYS_FRAME_LENGTH/TYP_TWORD_SIZE) /* Frame size in bytes */\r
#define SYS_IN_LENGTH (2L*SYS_FRAME_LENGTH*SYS_MICS_MAX) /* Input buffer length (dual) */\r
#define SYS_IN_SIZE (TYP_LINSAMPLE_SIZE*SYS_IN_LENGTH/TYP_TWORD_SIZE) /* # of words in input buffer */\r
+#define SYS_USE_DRC 1 /* Do we want use DRC */\r
\r
/*======================================================================\r
* Bit masks, bit-mask handling macros, error codes\r
#define SYS_ERR_MSSDEBUG (-15)\r
#define SYS_ERR_ANGLECONFIG (-16)\r
#define SYS_ERR_VAUERROR (-17)\r
+#define SYS_ERR_NOMEMORY (-18)\r
\r
/*======================================================================\r
* System Data Types\r
struct sysConfig_stc {\r
tint nmics; /* The actual number of microphones in ths system */\r
tint nvmics; /* The acutal number of virtual microphones in the system */\r
- tbool use_fileio; /* Use file I/O to load microphone files */\r
- tbool use_default; /* Use default angles for virtual microphones */\r
+ tint asnr_delay; /* delay in ms. Default is 5ms. */\r
+ tint asnr_attn[3]; /* band1, band2, band3 attenutation for ASNR (dB) */\r
+ tint asnr_enable; /* TRUE: enable ASNR, FALSE: disable it */\r
+ tint use_fileio; /* Use file I/O to load microphone files */\r
+ tint use_default; /* Use default angles for virtual microphones */\r
+ tint vad_enable; /* TRUE: enable VAD, FALSE: disable it */\r
+ tint drc_exp_knee; /* in dBm0! (default was -50dBm0 */\r
+ tint drc_max_amp; /* max gain in dB (default was 6dB */\r
+ tint drc_enable; /* TRUE: enable DRC, FALSE: disable it */\r
};\r
typedef struct sysConfig_stc sysConfig_t;\r
\r
void *asnrInst_p[SYS_VMICS_MAX]; /* ASNR instance pointers */\r
void *mssInst_p; /* MSS instance pointer */\r
void *vauInst_p; /* VAU instance pointer */\r
+ void *drcInst_p; /* DRC instance pointer */\r
\r
tint vmicangles[SYS_VMICS_MAX]; /* use SYS_BF_ANGLE_xxx from sysbfflt.h */\r
\r
- tbool use_fileio; /* Use file I/O to load microphone files */\r
- tbool eof; /* End of file reached */\r
- tbool use_default; /* Use default vmic angles (4,6,8,12 vmics supported only) */\r
+ tint asnr_delay; /* in ms. Default is 5ms. */\r
+ tint asnr_attn[3]; /* band 1,2,3 attenutations in dB */\r
+ tint asnr_enable; /* TRUE: enable, FALSE: disable ASNR */\r
+ tint use_fileio; /* Use file I/O to load microphone files */\r
+ tint eof; /* End of file reached */\r
+ tint use_default; /* Use default vmic angles (4,6,8,12 vmics supported only) */\r
+ tint vad_enable; /* TRUE: enable VAD, FALSE: disable it */\r
+ tint drc_exp_knee; /* in dBm0 (default was -50dBm0 */\r
+ tint drc_max_amp; /* max gain in dB (default was 6dB */\r
+ tint drc_enable; /* TRUE: enable DRC, FALSE: disable it */\r
};\r
typedef struct sysContext_stc sysContext_t;\r
\r
extern tint sysBfVMicAngles[]; /* Defined in sys.c */\r
\r
/* Buffer descriptor array for memory allocations */\r
-#define SYS_COMP_MAXBUFS 10\r
+#define SYS_COMP_MAXBUFS 12\r
extern ecomemBuffer_t sysCompBufs[];\r
\r
/*======================================================================\r
/* sysmss.c */\r
extern void sysMssCreate(void); /* Create the MSS module */\r
\r
+/* sysdrc.c */\r
+extern void sysDrcCreate(void); /* Create the DRC module */\r
+\r
/* sysvau.c */\r
extern void sysVauCreate(void); /* Create the VAU module */\r
\r
diff --git a/common/components/sysdrc.c b/common/components/sysdrc.c
--- /dev/null
@@ -0,0 +1,134 @@
+/*=================================================================\r
+ * sysdrc.c: DRC creation routines.\r
+ *=================================================================*/\r
+\r
+#include <xdc/std.h>\r
+#include <ti/sysbios/BIOS.h>\r
+#include <xdc/runtime/System.h>\r
+\r
+#include <ti/mas/types/types.h>\r
+#include <ti/mas/fract/fract.h>\r
+#include <ti/mas/util/ecomem.h>\r
+\r
+#include <ti/mas/aer/drc.h>\r
+\r
+#include "sys.h"\r
+\r
+drcSizeConfig_t drcSizeConfig = {\r
+ drc_SAMP_RATE_16K, /* sampling rate */\r
+ 16*drc_SAMP_RATE_16K /* 2ms maximum forward looking limiter delay in samples */\r
+};\r
+\r
+drcOpenConfig_t drcOpenConfig = { /* for drcOpen */\r
+ ((1<<drc_CFGBITS_FBAND) | /* use full-band operation */\r
+ (1<<drc_CFGBITS_LIM) | /* use limiter */\r
+ (1<<drc_CFGBITS_VAD)), /* update gains only during speech */\r
+ drc_SAMP_RATE_16K /* sampling rate */\r
+};\r
+\r
+static void sysDbgInfo (void *handle, tuint par1, tuint par2, tuint par3, tuint *ptr)\r
+{\r
+ return;\r
+} /* dummy sysDbgInfo */\r
+\r
+/*=================================================================\r
+ * void sysDrcCreate(void) Create DRC\r
+ *=================================================================*/\r
+void sysDrcCreate(void)\r
+{\r
+ int err;\r
+ tint nbufs;\r
+ const ecomemBuffer_t *bufs;\r
+ drcNewConfig_t drcNewConfig;\r
+ drcControl_t drcCtl;\r
+\r
+ drcCreateConfig_t drcCreateConfig = {sysDbgInfo}; /* pointer to a dummy debug info (not used in DRC) */\r
+\r
+ System_printf("...Initializing DRC\n");\r
+ System_flush();\r
+\r
+ /* Create DRC Context */\r
+ err = drcCreate (&drcCreateConfig);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcCreate() error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ /* Configure DRC */\r
+ err = drcGetSizes(&nbufs, &bufs, &drcSizeConfig);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcGetSizes error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ /* Allocate memory for beamformer */\r
+ if (nbufs > SYS_COMP_MAXBUFS) {\r
+ System_printf("*** not enough buffer descriptors");\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ drcNewConfig.sizeCfg = drcSizeConfig;\r
+ err = sysHeapAllocAll(nbufs, sysCompBufs, (const void*)bufs);\r
+ SYS_CHECK_ERROR(err);\r
+ \r
+ /* Give memory to DRC */\r
+ drcNewConfig.handle = (void*)0; /* Indicate instance #0 */\r
+ sysContext.drcInst_p = NULL;\r
+ err = drcNew(&sysContext.drcInst_p, nbufs, sysCompBufs, &drcNewConfig);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcNew() error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ /* Open DRC for business */\r
+ err = drcOpen(sysContext.drcInst_p,&drcOpenConfig);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcOpen() error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+ /* At this point DRC is open, but DISABLED! */\r
+ /* We need to do a few additional configurations through drcControl() */\r
+\r
+ /* Set the full band companding curve */\r
+ drcCtl.ctl_code = drc_CTL_SET_FBAND;\r
+ drcCtl.u.band.valid_bitfield = (1u<<drc_BAND_CFG_VALID_CURVE_PARAM_BIT);\r
+ drcCtl.u.band.curve.exp_knee = sysContext.drc_exp_knee; /* in dBm0! */\r
+ drcCtl.u.band.curve.ratios = frctAdjustQ(2,0,4) | (frctAdjustQ(2,0,4) << 8);\r
+ drcCtl.u.band.curve.max_amp = sysContext.drc_max_amp; /* in dB */\r
+ drcCtl.u.band.curve.com_knee = -15; /* -15dBm0 */\r
+ drcCtl.u.band.curve.energy_lim = -3; /* -3dBm0 */\r
+ err = drcControl (sysContext.drcInst_p, &drcCtl);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcControl() config full band error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ /* Set the limiter configuration */\r
+ drcCtl.ctl_code = drc_CTL_SET_LIM;\r
+ drcCtl.u.limiter.valid_bitfield = (1u<<drc_LIM_CFG_VALID_THRESH_BIT) |\r
+ (1u<<drc_LIM_CFG_VALID_DELAY_BIT);\r
+ drcCtl.u.limiter.thresh_dBm = -3; /* -3dBm0 */\r
+ drcCtl.u.limiter.delay_len = (8*drc_SAMP_RATE_16K); /* just the current value! */\r
+ err = drcControl (sysContext.drcInst_p, &drcCtl);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcControl() config limiter error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+\r
+ /* Turn DRC on */\r
+ if (sysContext.drc_enable) {\r
+ drcCtl.ctl_code = drc_CTL_DRC_ON;\r
+ err = drcControl (sysContext.drcInst_p, &drcCtl);\r
+ if (err != drc_NOERR) {\r
+ System_printf("*** drcControl() enable error: %d\n", err);\r
+ BIOS_exit(0);\r
+ }\r
+ }\r
+\r
+ System_printf("Done with DRC\n");\r
+ System_flush();\r
+\r
+} /* sysDrcCreate */\r
+\r
+/* nothing past this point */\r
+\r
index fa2ee35ec7740c756061834b84b6f4a1cc4490e1..8443184bf69ab7e614ca9899dd8ba736fc41447c 100644 (file)
<type>1</type>\r
<locationURI>PARENT-2-PROJECT_LOC/common/components/sysbfflt.h</locationURI>\r
</link>\r
+ <link>\r
+ <name>sysdrc.c</name>\r
+ <type>1</type>\r
+ <locationURI>PARENT-2-PROJECT_LOC/common/components/sysdrc.c</locationURI>\r
+ </link>\r
<link>\r
<name>syseram.c</name>\r
<type>1</type>\r
index 2fa4b345aa14722a41cb9a20016ebcc2198a80d2..570fb1eee7e8d8ec025315f2137527180ee01cdc 100644 (file)
"./sysasnr.obj" \
"./sysbf.obj" \
"./sysbfflt.obj" \
+"./sysdrc.obj" \\r
"./syseram.obj" \
"./sysiram.obj" \
"./sysmss.obj" \
clean:\r
-$(RM) $(GEN_MISC_FILES__QUOTED)$(EXE_OUTPUTS__QUOTED)$(GEN_FILES__QUOTED)$(BIN_OUTPUTS__QUOTED)$(GEN_OPTS__QUOTED)$(GEN_CMDS__QUOTED)\r
-$(RMDIR) $(GEN_MISC_DIRS__QUOTED)\r
- -$(RM) "fil.d" "mhm.d" "mss.d" "mssproc.d" "sys.d" "sysasnr.d" "sysbf.d" "sysbfflt.d" "syseram.d" "sysiram.d" "sysmss.d" "src\audio_dc_cfg.d" "src\edma_cfg.d" "src\main.d" "src\mcasp_cfg.d" "src\mcasp_osal.d" "src\sample_cs.d" "src\sample_k2g_cfg.d" "src\sample_k2g_int_reg.d" "src\sine.d" "src\test_exit.d" \r
- -$(RM) "fil.obj" "mhm.obj" "mss.obj" "mssproc.obj" "sys.obj" "sysasnr.obj" "sysbf.obj" "sysbfflt.obj" "syseram.obj" "sysiram.obj" "sysmss.obj" "src\audio_dc_cfg.obj" "src\edma_cfg.obj" "src\main.obj" "src\mcasp_cfg.obj" "src\mcasp_osal.obj" "src\sample_cs.obj" "src\sample_k2g_cfg.obj" "src\sample_k2g_int_reg.obj" "src\sine.obj" "src\test_exit.obj" \r
+ -$(RM) "fil.d" "mhm.d" "mss.d" "mssproc.d" "sys.d" "sysasnr.d" "sysbf.d" "sysbfflt.d" "sysdrc.d" "syseram.d" "sysiram.d" "sysmss.d" "src\audio_dc_cfg.d" "src\edma_cfg.d" "src\main.d" "src\mcasp_cfg.d" "src\mcasp_osal.d" "src\sample_cs.d" "src\sample_k2g_cfg.d" "src\sample_k2g_int_reg.d" "src\sine.d" "src\test_exit.d" \r
+ -$(RM) "fil.obj" "mhm.obj" "mss.obj" "mssproc.obj" "sys.obj" "sysasnr.obj" "sysbf.obj" "sysbfflt.obj" "sysdrc.obj" "syseram.obj" "sysiram.obj" "sysmss.obj" "src\audio_dc_cfg.obj" "src\edma_cfg.obj" "src\main.obj" "src\mcasp_cfg.obj" "src\mcasp_osal.obj" "src\sample_cs.obj" "src\sample_k2g_cfg.obj" "src\sample_k2g_int_reg.obj" "src\sine.obj" "src\test_exit.obj" \r
-@echo 'Finished clean'\r
-@echo ' '\r
\r
diff --git a/realtime_demo_bios/k2g/build/subdir_rules.mk b/realtime_demo_bios/k2g/build/subdir_rules.mk
index 5e7199935dac0ba4e77c0bd564d3fb782a104cef..ec1722f6051ade02635682087a6ed1165acc62cd 100644 (file)
@echo 'Finished building: $<'\r
@echo ' '\r
\r
+sysdrc.obj: ../../../common/components/sysdrc.c $(GEN_OPTS) $(GEN_HDRS)\r
+ @echo 'Building file: $<'\r
+ @echo 'Invoking: C6000 Compiler'\r
+ "${C6X_GEN_INSTALL_PATH}/bin/cl6x" -mv6600 --abi=eabi --opt_for_speed=5 --include_path="${C6X_GEN_INSTALL_PATH}/include" --include_path="${PDK_INSTALL_PATH}/ti/board/diag/nand/src" --include_path="../../../realtime_demo_bios/k2g/include" --include_path="../../../common/components" --include_path="${PDK_INSTALL_PATH}/ti/drv/mcasp" --include_path="${PDK_INSTALL_PATH}/ti/board" --include_path="${PDK_INSTALL_PATH}/ti/board/src/evmK2G/include" --include_path="${PDK_INSTALL_PATH}/ti/addon/cmbk2g/include" --include_path="${PDK_INSTALL_PATH}" --include_path="${PDK_INSTALL_PATH}/ti/csl" -g --define=DEVICE_K2G --define=SOC_K2G --define=evmK2G --define=PLATFORM_INIT_IN --define=BUILD_DSP --diag_warning=225 --diag_wrap=off --display_error_number --preproc_with_compile --preproc_dependency="sysdrc.d" $(GEN_OPTS__FLAG) "$<"\r
+ @echo 'Finished building: $<'\r
+ @echo ' '\r
+\r
syseram.obj: ../../../common/components/syseram.c $(GEN_OPTS) $(GEN_HDRS)\r
@echo 'Building file: $<'\r
@echo 'Invoking: C6000 Compiler'\r
diff --git a/realtime_demo_bios/k2g/build/subdir_vars.mk b/realtime_demo_bios/k2g/build/subdir_vars.mk
index 6fa9ea324456e098ffb573bec97a3c826c25aaa4..b4d6b2294b1d88e0002079d21faf7fe6c7d3bd9a 100644 (file)
../../../common/components/sysasnr.c \
../../../common/components/sysbf.c \
../../../common/components/sysbfflt.c \
+../../../common/components/sysdrc.c \
../../../common/components/syseram.c \
../../../common/components/sysiram.c \
../../../common/components/sysmss.c
./sysasnr.obj \
./sysbf.obj \
./sysbfflt.obj \
+./sysdrc.obj \
./syseram.obj \
./sysiram.obj \
./sysmss.obj
./sysasnr.d \
./sysbf.d \
./sysbfflt.d \
+./sysdrc.d \
./syseram.d \
./sysiram.d \
./sysmss.d
"sysasnr.d" \
"sysbf.d" \
"sysbfflt.d" \
+"sysdrc.d" \
"syseram.d" \
"sysiram.d" \
"sysmss.d"
"sysasnr.obj" \
"sysbf.obj" \
"sysbfflt.obj" \
+"sysdrc.obj" \
"syseram.obj" \
"sysiram.obj" \
"sysmss.obj"
"../../../common/components/sysasnr.c" \
"../../../common/components/sysbf.c" \
"../../../common/components/sysbfflt.c" \
+"../../../common/components/sysdrc.c" \
"../../../common/components/syseram.c" \
"../../../common/components/sysiram.c" \
"../../../common/components/sysmss.c"