123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- /*
- * Copyright 2017-2019 NXP
- * All rights reserved.
- *
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "fsl_codec_common.h"
- #include "fsl_codec_adapter.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- /*! @brief codec play and record capability */
- #define GET_PLAY_CHANNEL_CAPABILITY(capability) (capability & 0xFFU)
- #define GET_PLAY_SOURCE_CAPABILITY(capability) (capability >> 8U)
- #define GET_RECORD_SOURCE_CAPABILITY(capability) (capability & 0x3FU)
- #define GET_RECORD_CHANNEL_CAPABILITY(capability) (capability >> 6U)
- /*******************************************************************************
- * Variables
- ******************************************************************************/
- /*******************************************************************************
- * Code
- ******************************************************************************/
- /*!
- * brief Codec initilization.
- *
- * param handle codec handle.
- * param config codec configuration.
- * return kStatus_Success is success, else initial failed.
- */
- status_t CODEC_Init(codec_handle_t *handle, codec_config_t *config)
- {
- assert((config != NULL) && (handle != NULL));
- /* Set the handle information */
- handle->codecConfig = config;
- return HAL_CODEC_Init(handle, config);
- }
- /*!
- * brief Codec de-initilization.
- *
- * param handle codec handle.
- * return kStatus_Success is success, else de-initial failed.
- */
- status_t CODEC_Deinit(codec_handle_t *handle)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- return HAL_CODEC_Deinit(handle);
- }
- /*!
- * brief set audio data format.
- *
- * param handle codec handle.
- * param mclk master clock frequency in HZ.
- * param sampleRate sample rate in HZ.
- * param bitWidth bit width.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetFormat(codec_handle_t *handle, uint32_t mclk, uint32_t sampleRate, uint32_t bitWidth)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- return HAL_CODEC_SetFormat(handle, mclk, sampleRate, bitWidth);
- }
- /*!
- * brief codec module control.
- *
- * This function is used for codec module control, support switch digital interface cmd, can be expand to support codec
- * module specific feature
- *
- * param handle codec handle.
- * param cmd module control cmd, reference _codec_module_ctrl_cmd.
- * param data value to write, when cmd is kCODEC_ModuleRecordSourceChannel, the data should be a value combine
- * of channel and source, please reference macro CODEC_MODULE_RECORD_SOURCE_CHANNEL(source, LP, LN, RP, RN), reference
- * codec specific driver for detail configurations.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_ModuleControl(codec_handle_t *handle, codec_module_ctrl_cmd_t cmd, uint32_t data)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- switch (cmd)
- {
- case kCODEC_ModuleSwitchI2SInInterface:
- if ((handle->codecCapability.codecModuleCapability & kCODEC_SupportModuleI2SInSwitchInterface) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- break;
- default:
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_ModuleControl(handle, cmd, data);
- }
- /*!
- * brief set audio codec module volume.
- *
- * param handle codec handle.
- * param channel audio codec play channel, can be a value or combine value of _codec_play_channel.
- * param volume volume value, support 0 ~ 100, 0 is mute, 100 is the maximum volume value.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetVolume(codec_handle_t *handle, uint32_t playChannel, uint32_t volume)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- assert(volume <= CODEC_VOLUME_MAX_VALUE);
- /* check capability of set volume */
- if ((GET_PLAY_CHANNEL_CAPABILITY(handle->codecCapability.codecPlayCapability) & playChannel) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetVolume(handle, playChannel, volume);
- }
- /*!
- * brief set audio codec module mute.
- *
- * param handle codec handle.
- * param channel audio codec play channel, can be a value or combine value of _codec_play_channel.
- * param mute true is mute, false is unmute.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetMute(codec_handle_t *handle, uint32_t playChannel, bool mute)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- /* check capability of mute */
- if ((GET_PLAY_CHANNEL_CAPABILITY(handle->codecCapability.codecPlayCapability) & playChannel) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetMute(handle, playChannel, mute);
- }
- /*!
- * brief set audio codec module power.
- *
- * param handle codec handle.
- * param module audio codec module.
- * param powerOn true is power on, false is power down.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetPower(codec_handle_t *handle, codec_module_t module, bool powerOn)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- /* check capability of power switch */
- if ((handle->codecCapability.codecModuleCapability & (1U << module)) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetPower(handle, module, powerOn);
- }
- /*!
- * brief codec set record source.
- *
- * param handle codec handle.
- * param source audio codec record source, can be a value or combine value of _codec_record_source.
- *
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetRecord(codec_handle_t *handle, uint32_t recordSource)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- /* check capability of record capability */
- if ((GET_RECORD_SOURCE_CAPABILITY(handle->codecCapability.codecRecordCapability) & recordSource) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetRecord(handle, recordSource);
- }
- /*!
- * brief codec set record channel.
- *
- * param handle codec handle.
- * param leftRecordChannel audio codec record channel, reference _codec_record_channel, can be a value or combine value
- of member in _codec_record_channel.
- * param rightRecordChannel audio codec record channel, reference _codec_record_channel, can be a value combine of
- member in _codec_record_channel.
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetRecordChannel(codec_handle_t *handle, uint32_t leftRecordChannel, uint32_t rightRecordChannel)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- /* check capability of record capability */
- if ((GET_RECORD_CHANNEL_CAPABILITY(handle->codecCapability.codecRecordCapability) & leftRecordChannel) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- if ((GET_RECORD_CHANNEL_CAPABILITY(handle->codecCapability.codecRecordCapability) & rightRecordChannel) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetRecordChannel(handle, leftRecordChannel, rightRecordChannel);
- }
- /*!
- * brief codec set play source.
- *
- * param handle codec handle.
- * param playSource audio codec play source, can be a value or combine value of _codec_play_source.
- *
- * return kStatus_Success is success, else configure failed.
- */
- status_t CODEC_SetPlay(codec_handle_t *handle, uint32_t playSource)
- {
- assert((handle != NULL) && (handle->codecConfig != NULL));
- /* check capability of record capability */
- if ((GET_PLAY_SOURCE_CAPABILITY(handle->codecCapability.codecPlayCapability) & playSource) == 0U)
- {
- return kStatus_CODEC_NotSupport;
- }
- return HAL_CODEC_SetPlay(handle, playSource);
- }
|