You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CMSIS-DSP/ComputeGraph/cg/nodes/cpp/StreamingNodes/VHT/audio/audio_drv.h

136 lines
4.2 KiB
C

/*
* Copyright (c) 2021 Arm Limited. All rights reserved.
*/
#ifndef __AUDIO_DRV_H
#define __AUDIO_DRV_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
/* Audio Interface */
#define AUDIO_DRV_INTERFACE_TX (1U) ///< Transmitter
#define AUDIO_DRV_INTERFACE_RX (2U) ///< Receiver
/* Audio Control */
#define AUDIO_DRV_CONTROL_TX_ENABLE (1UL << 0) ///< Enable Transmitter
#define AUDIO_DRV_CONTROL_RX_ENABLE (1UL << 1) ///< Enable Receiver
#define AUDIO_DRV_CONTROL_TX_DISABLE (1UL << 2) ///< Disable Transmitter
#define AUDIO_DRV_CONTROL_RX_DISABLE (1UL << 3) ///< Disable Receiver
/* Audio Event */
#define AUDIO_DRV_EVENT_TX_DATA (1UL << 0) ///< Data block transmitted
#define AUDIO_DRV_EVENT_RX_DATA (1UL << 1) ///< Data block received
/* Return code */
#define AUDIO_DRV_OK (0) ///< Operation succeeded
#define AUDIO_DRV_ERROR (-1) ///< Unspecified error
#define AUDIO_DRV_ERROR_BUSY (-2) ///< Driver is busy
#define AUDIO_DRV_ERROR_TIMEOUT (-3) ///< Timeout occurred
#define AUDIO_DRV_ERROR_UNSUPPORTED (-4) ///< Operation not supported
#define AUDIO_DRV_ERROR_PARAMETER (-5) ///< Parameter error
/**
\brief Audio Status
*/
typedef struct {
uint32_t tx_active : 1; ///< Transmitter active
uint32_t rx_active : 1; ///< Receiver active
uint32_t reserved : 30;
} AudioDrv_Status_t;
/**
\fn AudioDrv_Event_t
\brief Audio Events callback function type: void (*AudioDrv_Event_t) (uint32_t event
\param[in] event events notification mask
\return none
*/
typedef void (*AudioDrv_Event_t) (uint32_t event);
uint8_t* AudioRXBuffer();
uint8_t* AudioTXBuffer();
extern int32_t AudioDrv_Setup(void);
/**
\fn int32_t AudioDrv_Initialize (AudioDrv_Event_t cb_event)
\brief Initialize Audio Interface.
\param[in] cb_event pointer to \ref AudioDrv_Event_t
\return return code
*/
int32_t AudioDrv_Initialize (AudioDrv_Event_t cb_event);
/**
\fn void AudioDrv_Stop (void);
\brief Stop audio simulation.
\return return code
*/
void AudioDrv_Stop (void);
/**
\fn int32_t AudioDrv_Uninitialize (void)
\brief De-initialize Audio Interface.
\return return code
*/
int32_t AudioDrv_Uninitialize (void);
/**
\fn int32_t AudioDrv_Configure (uint32_t interface, uint32_t channels, uint32_t sample_bits, uint32_t sample_rate)
\brief Configure Audio Interface.
\param[in] interface audio interface
\param[in] channels number of channels
\param[in] sample_bits sample number of bits (8..32)
\param[in] sample_rate sample rate (samples per second)
\return return code
*/
int32_t AudioDrv_Configure (uint32_t interface, uint32_t channels, uint32_t sample_bits, uint32_t sample_rate);
/**
\fn int32_t AudioDrv_SetBuf (uint32_t interface, void *buf, uint32_t block_num, uint32_t block_size)
\brief Set Audio Interface buffer.
\param[in] interface audio interface
\param[in] buf pointer to buffer for audio data
\param[in] block_num number of blocks in buffer (must be 2^n)
\param[in] block_size block size in number of samples
\return return code
*/
int32_t AudioDrv_SetBuf (uint32_t interface, void *buf, uint32_t block_num, uint32_t block_size);
/**
\fn int32_t AudioDrv_Control (uint32_t control)
\brief Control Audio Interface.
\param[in] control operation
\return return code
*/
int32_t AudioDrv_Control (uint32_t control);
/**
\fn uint32_t AudioDrv_GetTxCount (void)
\brief Get transmitted block count.
\return number of transmitted blocks
*/
uint32_t AudioDrv_GetTxCount (void);
/**
\fn uint32_t AudioDrv_GetRxCount (void)
\brief Get received block count.
\return number of received blocks
*/
uint32_t AudioDrv_GetRxCount (void);
/**
\fn AudioDrv_Status_t AudioDrv_GetStatus (void)
\brief Get Audio Interface status.
\return \ref AudioDrv_Status_t
*/
AudioDrv_Status_t AudioDrv_GetStatus (void);
#ifdef __cplusplus
}
#endif
#endif /* __AUDIO_DRV_H */