summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorEvalZero <[email protected]>2019-08-06 11:36:50 +0800
committerEvalZero <[email protected]>2019-08-06 11:36:50 +0800
commite855fb8536d107ef6597fcb5c2262f7622ee1270 (patch)
tree02db8db98f1854582ab14682fcbc10aa79bfe09d /components/drivers/include
parent87267b41bca07c9a0d6e87a33b604d23de3acc0d (diff)
[components][audio]improve device ops interface and data flows.
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/audio.h144
1 files changed, 52 insertions, 92 deletions
diff --git a/components/drivers/include/drivers/audio.h b/components/drivers/include/drivers/audio.h
index 7d2cb36728..86057e7626 100644
--- a/components/drivers/include/drivers/audio.h
+++ b/components/drivers/include/drivers/audio.h
@@ -5,52 +5,30 @@
*
* Change Logs:
* Date Author Notes
- * 2017-05-09 Urey first version
+ * 2017-05-09 Urey first version
+ * 2019-07-09 Zero-Free improve device ops interface and data flows
+ *
*/
#ifndef __AUDIO_H__
#define __AUDIO_H__
+#include "audio_pipe.h"
+
/* AUDIO command */
#define _AUDIO_CTL(a) (0x10 + a)
#define AUDIO_CTL_GETCAPS _AUDIO_CTL(1)
#define AUDIO_CTL_CONFIGURE _AUDIO_CTL(2)
-#define AUDIO_CTL_SHUTDOWN _AUDIO_CTL(3)
-#define AUDIO_CTL_START _AUDIO_CTL(4)
-#define AUDIO_CTL_STOP _AUDIO_CTL(5)
-#define AUDIO_CTL_PAUSE _AUDIO_CTL(6)
-#define AUDIO_CTL_RESUME _AUDIO_CTL(7)
-#define AUDIO_CTL_GETBUFFERINFO _AUDIO_CTL(8)
-#define AUDIO_CTL_ALLOCBUFFER _AUDIO_CTL(9)
-#define AUDIO_CTL_FREEBUFFER _AUDIO_CTL(10)
-#define AUDIO_CTL_HWRESET _AUDIO_CTL(11)
-
+#define AUDIO_CTL_START _AUDIO_CTL(3)
+#define AUDIO_CTL_STOP _AUDIO_CTL(4)
+#define AUDIO_CTL_GETBUFFERINFO _AUDIO_CTL(5)
/* Audio Device Types */
#define AUDIO_TYPE_QUERY 0x00
#define AUDIO_TYPE_INPUT 0x01
#define AUDIO_TYPE_OUTPUT 0x02
#define AUDIO_TYPE_MIXER 0x04
-#define AUDIO_TYPE_SELECTOR 0x08
-#define AUDIO_TYPE_EFFECT 0x10
-
-/* Audio Format Types */
-#define AUDIO_FMT_PCM_U8 0x0001
-#define AUDIO_FMT_PCM_S8 0x0002
-
-#define AUDIO_FMT_PCM_U16_LE 0x0010
-#define AUDIO_FMT_PCM_S16_BE 0x0020
-#define AUDIO_FMT_PCM_S16_LE 0x0040
-#define AUDIO_FMT_PCM_U16_BE 0x0080
-#define AUDIO_FMT_PCM_U24_LE 0x0100
-#define AUDIO_FMT_PCM_S24_BE 0x0200
-#define AUDIO_FMT_PCM_S24_LE 0x0400
-#define AUDIO_FMT_PCM_U24_BE 0x0800
-#define AUDIO_FMT_PCM_U32_LE 0x1000
-#define AUDIO_FMT_PCM_S32_BE 0x2000
-#define AUDIO_FMT_PCM_S32_LE 0x4000
-#define AUDIO_FMT_PCM_U32_BE 0x8000
/* Supported Sampling Rates */
#define AUDIO_SAMP_RATE_8K 0x0001
@@ -76,13 +54,11 @@
#define AUDIO_BIT_RATE_172K 0x40
#define AUDIO_BIT_RATE_192K 0x80
-
-
/* Support Dsp(input/output) Units controls */
#define AUDIO_DSP_PARAM 0 /* get/set all params */
-#define AUDIO_DSP_SAMPLERATE 1 /* 采样频率 */
-#define AUDIO_DSP_FMT 2
-#define AUDIO_DSP_CHANNELS 3
+#define AUDIO_DSP_SAMPLERATE 1 /* samplerate */
+#define AUDIO_DSP_CHANNELS 2 /* channels */
+#define AUDIO_DSP_SAMPLEBITS 3 /* sample bits width */
/* Supported Mixer Units controls */
#define AUDIO_MIXER_QUERY 0x0000
@@ -95,15 +71,13 @@
#define AUDIO_MIXER_LINE 0x0040
#define AUDIO_MIXER_DIGITAL 0x0080
#define AUDIO_MIXER_MIC 0x0100
+#define AUDIO_MIXER_VITURAL 0x0200
+#define AUDIO_MIXER_EXTEND 0x8000 /* extend mixer command */
-#define AUDIO_MIXER_EXTEND 0x8000 //extend mixer command
+#define AUDIO_VOLUME_MAX (100)
+#define AUDIO_VOLUME_MIN (0)
#define CFG_AUDIO_REPLAY_QUEUE_COUNT 4
-#define CFG_AUDIO_RECORD_PIPE_SIZE (8 * 1024)
-#define AUDIO_DEVICE_MP_CNT (4)
-#define AUDIO_DEVICE_DECODE_MP_BLOCK_SZ (4352 * 4)
-#define AUDIO_DEVICE_DECODE_MP_SZ ((AUDIO_DEVICE_DECODE_MP_BLOCK_SZ*2 + 4)*AUDIO_DEVICE_MP_CNT)
-
enum
{
@@ -115,19 +89,10 @@ enum
/* the preferred number and size of audio pipeline buffer for the audio device */
struct rt_audio_buf_info
{
- rt_uint32_t buffer_size; /* Preferred qty of buffers */
- rt_uint32_t buffer_count; /* Preferred size of the buffers */
-};
-struct rt_audio_buf_desc
-{
- rt_uint8_t *data_ptr;
- rt_size_t data_size;
-};
-
-struct rt_audio_frame
-{
- const void *data_ptr;
- rt_size_t data_size;
+ rt_uint8_t *buffer;
+ rt_uint16_t block_size;
+ rt_uint16_t block_count;
+ rt_uint32_t total_size;
};
struct rt_audio_device;
@@ -135,73 +100,68 @@ struct rt_audio_caps;
struct rt_audio_configure;
struct rt_audio_ops
{
- rt_err_t (*getcaps) (struct rt_audio_device *audio,struct rt_audio_caps *caps);
- rt_err_t (*configure) (struct rt_audio_device *audio,struct rt_audio_caps *caps);
-
- rt_err_t (*init) (struct rt_audio_device *audio);
- rt_err_t (*shutdown) (struct rt_audio_device *audio);
- rt_err_t (*start) (struct rt_audio_device *audio,int stream);
- rt_err_t (*stop) (struct rt_audio_device *audio,int stream);
- rt_err_t (*suspend) (struct rt_audio_device *audio,int stream);
- rt_err_t (*resume) (struct rt_audio_device *audio,int stream);
-
- rt_err_t (*control) (struct rt_audio_device *audio, int cmd, void *arg);
- rt_size_t (*transmit) (struct rt_audio_device *audio, const void *writeBuf,void *readBuf, rt_size_t size);
-
- //get page size of codec or private buffer's info
- void (*buffer_info) (struct rt_audio_device *audio,struct rt_audio_buf_info *info );
+ rt_err_t (*getcaps)(struct rt_audio_device *audio, struct rt_audio_caps *caps);
+ rt_err_t (*configure)(struct rt_audio_device *audio, struct rt_audio_caps *caps);
+ rt_err_t (*init)(struct rt_audio_device *audio);
+ rt_err_t (*start)(struct rt_audio_device *audio, int stream);
+ rt_err_t (*stop)(struct rt_audio_device *audio, int stream);
+ rt_size_t (*transmit)(struct rt_audio_device *audio, const void *writeBuf, void *readBuf, rt_size_t size);
+ /* get page size of codec or private buffer's info */
+ void (*buffer_info)(struct rt_audio_device *audio, struct rt_audio_buf_info *info);
};
-
struct rt_audio_configure
{
- rt_uint32_t channels;
-
- rt_uint32_t samplefmt;
rt_uint32_t samplerate;
- rt_uint32_t samplefmts;
+ rt_uint16_t channels;
+ rt_uint16_t samplebits;
};
struct rt_audio_caps
{
- int main_type;
- int sub_type;
+ int main_type;
+ int sub_type;
- union
- {
- rt_uint32_t mask;
- int value;
- struct rt_audio_configure config;
- }udata;
+ union
+ {
+ rt_uint32_t mask;
+ int value;
+ struct rt_audio_configure config;
+ } udata;
};
struct rt_audio_replay
{
- rt_bool_t activated;
+ struct rt_mempool *mp;
struct rt_data_queue queue;
+ struct rt_mutex lock;
+ struct rt_completion cmp;
+ struct rt_audio_buf_info buf_info;
+ rt_uint8_t *write_data;
+ rt_uint16_t write_index;
+ rt_uint16_t read_index;
+ rt_uint32_t pos;
+ rt_uint8_t event;
+ rt_bool_t activated;
};
struct rt_audio_record
{
+ struct rt_audio_pipe pipe;
rt_bool_t activated;
};
struct rt_audio_device
{
- struct rt_device parent;
+ struct rt_device parent;
struct rt_audio_ops *ops;
-
- struct rt_mempool mp;
-
struct rt_audio_replay *replay;
struct rt_audio_record *record;
};
-rt_err_t rt_audio_register (struct rt_audio_device *audio, const char *name, rt_uint32_t flag, void *data);
-void rt_audio_tx_complete (struct rt_audio_device *audio,rt_uint8_t *pbuf);
-void rt_audio_rx_done (struct rt_audio_device *audio,rt_uint8_t *pbuf,rt_size_t len);
-rt_uint32_t rt_audio_format_to_bits (rt_uint32_t format);
-
+rt_err_t rt_audio_register(struct rt_audio_device *audio, const char *name, rt_uint32_t flag, void *data);
+void rt_audio_tx_complete(struct rt_audio_device *audio);
+void rt_audio_rx_done(struct rt_audio_device *audio, rt_uint8_t *pbuf, rt_size_t len);
/* Device Control Commands */
#define CODEC_CMD_RESET 0