73 lines
2.1 KiB
C
73 lines
2.1 KiB
C
#include "audio_rpmsg.h"
|
|
#include "algorithm.h"
|
|
#include "FreeRTOS.h"
|
|
#include "dsp.h"
|
|
|
|
void *algorithm_init(uint8_t algo_sel, uint32_t sample_rate, uint8_t ns_level, uint16_t agc_mode, uint32_t *frame_size)
|
|
{
|
|
struct rpmsg_sync_msg_algorithm_init *sync_msg;
|
|
void *result;
|
|
|
|
sync_msg = pvPortMalloc(sizeof(struct rpmsg_sync_msg_algorithm_init));
|
|
if (sync_msg == NULL) {
|
|
return NULL;
|
|
}
|
|
sync_msg->algo_sel = algo_sel;
|
|
sync_msg->sample_rate = sample_rate;
|
|
sync_msg->ns_level = ns_level;
|
|
sync_msg->agc_mode = agc_mode;
|
|
sync_msg->frame_size = frame_size;
|
|
|
|
rpmsg_sync_invoke(rpmsg_get_remote_instance(), RPMSG_SYNC_FUNC_AUDIO_ALGO_INIT, sync_msg, (uint32_t *)&result);
|
|
|
|
vPortFree(sync_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
int algorithm_launch(void *handle, int16_t *farend, int16_t *nearend, int16_t **out)
|
|
{
|
|
struct rpmsg_sync_msg_algorithm_launch *sync_msg;
|
|
int result;
|
|
bool trans_addr = false;
|
|
|
|
sync_msg = pvPortMalloc(sizeof(struct rpmsg_sync_msg_algorithm_launch));
|
|
if (sync_msg == NULL) {
|
|
return NULL;
|
|
}
|
|
|
|
if (((uint32_t)farend >= DSP_DRAM_MCU_BASE_ADDR) && ((uint32_t)farend < (DSP_DRAM_MCU_BASE_ADDR+DSP_DRAM_SIZE))) {
|
|
farend = (void *)MCU_SRAM_2_DSP_DRAM(farend);
|
|
}
|
|
if (((uint32_t)nearend >= DSP_DRAM_MCU_BASE_ADDR) && ((uint32_t)nearend < (DSP_DRAM_MCU_BASE_ADDR+DSP_DRAM_SIZE))) {
|
|
nearend = (void *)MCU_SRAM_2_DSP_DRAM(nearend);
|
|
}
|
|
|
|
sync_msg->handle = handle;
|
|
sync_msg->farend = farend;
|
|
sync_msg->nearend = nearend;
|
|
sync_msg->out = out;
|
|
|
|
if (*out == NULL) {
|
|
trans_addr = true;
|
|
}
|
|
|
|
rpmsg_sync_invoke(rpmsg_get_remote_instance(), RPMSG_SYNC_FUNC_AUDIO_ALGO_LAUNCH, sync_msg, NULL);
|
|
|
|
if (trans_addr) {
|
|
*out = (void *)DSP_DRAM_2_MCU_SRAM(*out);
|
|
}
|
|
|
|
vPortFree(sync_msg);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void algorithm_destroy(void *handle)
|
|
{
|
|
struct rpmsg_sync_msg_algorithm_destroy_t sync_msg;
|
|
|
|
sync_msg.handle = handle;
|
|
rpmsg_sync_invoke(rpmsg_get_remote_instance(), RPMSG_SYNC_FUNC_AUDIO_ALGO_RELEASE, (void *)&sync_msg, NULL);
|
|
}
|