audio.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #ifndef __AUDIO_H__
  2. #define __AUDIO_H__
  3. #include "queue.h"
  4. #include "semphr.h"
  5. /* AUDIO command */
  6. #define _AUDIO_CTL(a) (0x10 + a)
  7. #define AUDIO_CTL_GETCAPS _AUDIO_CTL(1)
  8. #define AUDIO_CTL_CONFIGURE _AUDIO_CTL(2)
  9. #define AUDIO_CTL_START _AUDIO_CTL(3)
  10. #define AUDIO_CTL_STOP _AUDIO_CTL(4)
  11. #define AUDIO_CTL_GETBUFFERINFO _AUDIO_CTL(5)
  12. /* Audio Device Types */
  13. #define AUDIO_TYPE_QUERY 0x00
  14. #define AUDIO_TYPE_INPUT 0x01
  15. #define AUDIO_TYPE_OUTPUT 0x02
  16. #define AUDIO_TYPE_MIXER 0x04
  17. /* Supported Sampling Rates */
  18. #define AUDIO_SAMP_RATE_8K 0x0001
  19. #define AUDIO_SAMP_RATE_11K 0x0002
  20. #define AUDIO_SAMP_RATE_16K 0x0004
  21. #define AUDIO_SAMP_RATE_22K 0x0008
  22. #define AUDIO_SAMP_RATE_32K 0x0010
  23. #define AUDIO_SAMP_RATE_44K 0x0020
  24. #define AUDIO_SAMP_RATE_48K 0x0040
  25. #define AUDIO_SAMP_RATE_96K 0x0080
  26. #define AUDIO_SAMP_RATE_128K 0x0100
  27. #define AUDIO_SAMP_RATE_160K 0x0200
  28. #define AUDIO_SAMP_RATE_172K 0x0400
  29. #define AUDIO_SAMP_RATE_192K 0x0800
  30. /* Supported Bit Rates */
  31. #define AUDIO_BIT_RATE_22K 0x01
  32. #define AUDIO_BIT_RATE_44K 0x02
  33. #define AUDIO_BIT_RATE_48K 0x04
  34. #define AUDIO_BIT_RATE_96K 0x08
  35. #define AUDIO_BIT_RATE_128K 0x10
  36. #define AUDIO_BIT_RATE_160K 0x20
  37. #define AUDIO_BIT_RATE_172K 0x40
  38. #define AUDIO_BIT_RATE_192K 0x80
  39. /* Support Dsp(input/output) Units controls */
  40. #define AUDIO_DSP_PARAM 0 /* get/set all params */
  41. #define AUDIO_DSP_SAMPLERATE 1 /* samplerate */
  42. #define AUDIO_DSP_CHANNELS 2 /* channels */
  43. #define AUDIO_DSP_SAMPLEBITS 3 /* sample bits width */
  44. #define AUDIO_VOLUME 4
  45. #define AUDIO_MUTE 5
  46. /* Supported Mixer Units controls */
  47. #define AUDIO_MIXER_QUERY 0x0000
  48. #define AUDIO_MIXER_MUTE 0x0001
  49. #define AUDIO_MIXER_VOLUME 0x0002
  50. #define AUDIO_MIXER_BASS 0x0004
  51. #define AUDIO_MIXER_MID 0x0008
  52. #define AUDIO_MIXER_TREBLE 0x0010
  53. #define AUDIO_MIXER_EQUALIZER 0x0020
  54. #define AUDIO_MIXER_LINE 0x0040
  55. #define AUDIO_MIXER_DIGITAL 0x0080
  56. #define AUDIO_MIXER_MIC 0x0100
  57. #define AUDIO_MIXER_VITURAL 0x0200
  58. #define AUDIO_MIXER_EXTEND 0x8000 /* extend mixer command */
  59. #define AUDIO_VOLUME_MAX (100)
  60. #define AUDIO_VOLUME_MIN (0)
  61. #define CFG_AUDIO_REPLAY_QUEUE_COUNT 8
  62. /**
  63. * audio flags defitions
  64. */
  65. //#define AUDIO_FLAG_REPLAY 0
  66. //#define AUDIO_FLAG_RECORD 1
  67. #define AUDIO_FLAG_REPLAY (1 << 0)
  68. #define AUDIO_FLAG_RECORD (1 << 1)
  69. #define AUDIO_FLAG_REPLAY_RECORD (AUDIO_FLAG_REPLAY | AUDIO_FLAG_RECORD)
  70. #define AUDIO_REPLAY_MP_BLOCK_SIZE (4096)
  71. #define AUDIO_REPLAY_MP_BLOCK_COUNT 4
  72. #define AUDIO_RECORD_PIPE_SIZE 2048
  73. //typedef int (*audio_record_callback)(struct audio_device *audio, void *buffer, int size);
  74. enum
  75. {
  76. AUDIO_STREAM_REPLAY = AUDIO_FLAG_REPLAY,
  77. AUDIO_STREAM_RECORD = AUDIO_FLAG_RECORD,
  78. AUDIO_STREAM_LAST = AUDIO_STREAM_RECORD,
  79. };
  80. /* the preferred number and size of audio pipeline buffer for the audio device */
  81. struct audio_buf_info
  82. {
  83. uint8_t *buffer;
  84. uint16_t block_size;
  85. uint16_t block_count;
  86. uint32_t total_size;
  87. };
  88. struct audio_device;
  89. struct audio_caps;
  90. struct audio_configure;
  91. struct audio_ops
  92. {
  93. int (*getcaps)(struct audio_device *audio, struct audio_caps *caps);
  94. int (*configure)(struct audio_device *audio, struct audio_caps *caps);
  95. int (*init)(struct audio_device *audio);
  96. int (*start)(struct audio_device *audio, int stream);
  97. int (*stop)(struct audio_device *audio, int stream);
  98. size_t (*transmit)(struct audio_device *audio, const void *writeBuf, void *readBuf, size_t size);
  99. /* get page size of codec or private buffer's info */
  100. void (*buffer_info)(struct audio_device *audio, struct audio_buf_info *info, int stream);
  101. };
  102. struct audio_configure
  103. {
  104. uint32_t samplerate;
  105. uint16_t channels;
  106. uint16_t samplebits;
  107. };
  108. struct audio_caps
  109. {
  110. int main_type;
  111. int sub_type;
  112. union
  113. {
  114. uint32_t mask;
  115. int value;
  116. struct audio_configure config;
  117. } udata;
  118. };
  119. struct audio_replay
  120. {
  121. QueueHandle_t queue;
  122. SemaphoreHandle_t lock;
  123. QueueHandle_t cmp;
  124. struct audio_buf_info buf_info;
  125. uint8_t *mempool;
  126. uint8_t mpstatus[AUDIO_REPLAY_MP_BLOCK_COUNT];
  127. uint8_t *write_data;
  128. uint16_t write_index;
  129. uint16_t read_index;
  130. uint32_t pos;
  131. uint8_t event;
  132. uint8_t activated;
  133. };
  134. struct audio_record
  135. {
  136. QueueHandle_t cmp;
  137. struct audio_buf_info buf_info;
  138. int read_index;
  139. int remain_size;
  140. uint8_t event;
  141. uint8_t activated;
  142. int (*receive_cb)(struct audio_device *audio);
  143. };
  144. struct audio_device
  145. {
  146. struct audio_ops *ops;
  147. struct audio_replay *replay;
  148. struct audio_record *record;
  149. /* device call back */
  150. int (*rx_indicate)(struct audio_device *audio, size_t size);
  151. int (*tx_complete)(struct audio_device *audio, void *buffer);
  152. int id;
  153. uint32_t flag;
  154. void *user_data; /**< device private data */
  155. };
  156. int audio_register(struct audio_device *audio, uint32_t flag, void *data);
  157. void audio_tx_complete(struct audio_device *audio);
  158. int audio_rx_complete(struct audio_device *audio);
  159. void audio_rx_done(struct audio_device *audio, uint8_t *pbuf, size_t len);
  160. struct audio_device *audio_dev_open(int i2s_id, uint32_t oflag);
  161. int audio_dev_close(struct audio_device *audio, uint32_t oflag);
  162. size_t audio_dev_read(struct audio_device *audio, void *buffer, size_t size);
  163. size_t audio_dev_write(struct audio_device *audio, const void *buffer, size_t size);
  164. int audio_dev_configure(struct audio_device *audio, struct audio_caps *caps);
  165. int audio_dev_replay_set_param(struct audio_device *audio, uint8_t *buf, int size);
  166. int audio_dev_replay_start(struct audio_device *audio);
  167. int audio_dev_register_record_callback(struct audio_device *audio, int (*callback)(struct audio_device *audio));
  168. int audio_dev_record_set_param(struct audio_device *audio, uint8_t *buf, int size);
  169. int audio_dev_record_start(struct audio_device *audio);
  170. int audio_dev_record_stop(struct audio_device *audio);
  171. /* Device Control Commands */
  172. #define CODEC_CMD_RESET 0
  173. #define CODEC_CMD_SET_VOLUME 1
  174. #define CODEC_CMD_GET_VOLUME 2
  175. #define CODEC_CMD_SAMPLERATE 3
  176. #define CODEC_CMD_EQ 4
  177. #define CODEC_CMD_3D 5
  178. #endif /* __AUDIO_H__ */