Files

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);
}