source: azure_iot_hub_f767zi/trunk/asp_baseplatform/gdic/staudio_wm8994/staudio_wm8994.h

Last change on this file was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 13.0 KB
Line 
1/*
2 * TOPPERS BASE PLATFORM MIDDLEWARE
3 *
4 * Copyright (C) 2017-2018 by TOPPERS PROJECT
5 * Educational Working Group.
6 *
7 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12 * スコード中に含まれていること.
13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16 * の無保証規定を掲載すること.
17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19 * と.
20 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
22 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23 * 報告すること.
24 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28 * 免責すること.
29 *
30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34 * の責任を負わない.
35 *
36 * @(#) $Id$
37 */
38/**
39 ******************************************************************************
40 * @attention
41 *
42 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
43 *
44 * Redistribution and use in source and binary forms, with or without modification,
45 * are permitted provided that the following conditions are met:
46 * 1. Redistributions of source code must retain the above copyright notice,
47 * this list of conditions and the following disclaimer.
48 * 2. Redistributions in binary form must reproduce the above copyright notice,
49 * this list of conditions and the following disclaimer in the documentation
50 * and/or other materials provided with the distribution.
51 * 3. Neither the name of STMicroelectronics nor the names of its contributors
52 * may be used to endorse or promote products derived from this software
53 * without specific prior written permission.
54 *
55 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
56 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
57 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
58 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
59 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
60 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
61 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
62 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
63 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
64 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
65 *
66 ******************************************************************************
67 */
68
69#ifndef _STAUDIO_WM8994_H_
70#define _STAUDIO_WM8994_H_
71
72#ifdef __cplusplus
73 extern "C" {
74#endif
75
76#include <kernel.h>
77#include <t_syslog.h>
78#include <t_stdlib.h>
79#include "device.h"
80#include "i2c.h"
81#include "sai.h"
82#ifdef TOPPERS_STM32F769_DISCOVERY
83#include "dfsdm.h"
84#endif
85
86/******************************************************************************/
87/*************************** Codec User defines ******************************/
88/******************************************************************************/
89/* Codec output DEVICE */
90#define OUTPUT_DEVICE_SPEAKER ((uint16_t)0x0001)
91#define OUTPUT_DEVICE_HEADPHONE ((uint16_t)0x0002)
92#define OUTPUT_DEVICE_BOTH ((uint16_t)0x0003)
93#define OUTPUT_DEVICE_AUTO ((uint16_t)0x0004)
94#define INPUT_DEVICE_DIGITAL_MICROPHONE_1 ((uint16_t)0x0100)
95#define INPUT_DEVICE_DIGITAL_MICROPHONE_2 ((uint16_t)0x0200)
96#define INPUT_DEVICE_INPUT_LINE_1 ((uint16_t)0x0300)
97#define INPUT_DEVICE_INPUT_LINE_2 ((uint16_t)0x0400)
98#define INPUT_DEVICE_DIGITAL_MIC1_MIC2 ((uint16_t)0x0800)
99
100/* MP34DT01TR digital microphone on PCB top side */
101#define INPUT_DEVICE_DIGITAL_MIC ((uint16_t)0)
102
103/* Volume Levels values */
104#define DEFAULT_VOLMIN 0x00
105#define DEFAULT_VOLMAX 0xFF
106#define DEFAULT_VOLSTEP 0x04
107
108#define AUDIO_PAUSE 0
109#define AUDIO_RESUME 1
110
111/* Codec POWER DOWN modes */
112#define CODEC_PDWN_HW 1
113#define CODEC_PDWN_SW 2
114
115/* MUTE commands */
116#define AUDIO_MUTE_ON 1
117#define AUDIO_MUTE_OFF 0
118
119
120#define VOLUME_CONVERT(Volume) (((Volume) > 100)? 100:((uint8_t)(((Volume) * 63) / 100)))
121#define VOLUME_IN_CONVERT(Volume) (((Volume) >= 100)? 239:((uint8_t)(((Volume) * 240) / 100)))
122
123/******************************************************************************/
124/****************************** REGISTER MAPPING ******************************/
125/******************************************************************************/
126/**
127 * @brief WM8994 ID
128 */
129#define WM8994_ID 0x08994
130
131/**
132 * @brief Device ID Register: Reading from this register will indicate device
133 * family ID 8994h
134 */
135#define WM8994_CHIPID_ADDR 0x00
136
137
138/*------------------------------------------------------------------------------
139 Audio Codec functions
140------------------------------------------------------------------------------*/
141/**
142 * @brief Audio I2C Slave address
143 */
144#define AUDIO_I2C_ADDRESS ((uint16_t)0x34)
145
146
147/** @defgroup BSP_Audio_Out_Option BSP Audio Out Option
148 * @{
149 */
150#define BSP_AUDIO_OUT_CIRCULARMODE ((uint32_t)0x00000001) /* BUFFER CIRCULAR MODE */
151#define BSP_AUDIO_OUT_NORMALMODE ((uint32_t)0x00000002) /* BUFFER NORMAL MODE */
152#define BSP_AUDIO_OUT_STEREOMODE ((uint32_t)0x00000004) /* STEREO MODE */
153#define BSP_AUDIO_OUT_MONOMODE ((uint32_t)0x00000008) /* MONO MODE */
154/**
155 * @}
156 */
157/** @defgroup BSP_Audio_Sample_Rate BSP Audio Sample Rate
158 * @{
159 */
160#define BSP_AUDIO_FREQUENCY_96K ((uint32_t)192000U)
161#define BSP_AUDIO_FREQUENCY_48K ((uint32_t)48000U)
162#define BSP_AUDIO_FREQUENCY_44K ((uint32_t)44100U)
163#define BSP_AUDIO_FREQUENCY_32K ((uint32_t)32000U)
164#define BSP_AUDIO_FREQUENCY_22K ((uint32_t)22050U)
165#define BSP_AUDIO_FREQUENCY_16K ((uint32_t)16000U)
166#define BSP_AUDIO_FREQUENCY_11K ((uint32_t)11025U)
167#define BSP_AUDIO_FREQUENCY_8K ((uint32_t)8000U)
168
169/*------------------------------------------------------------------------------
170 USER SAI defines parameters
171 -----------------------------------------------------------------------------*/
172/** CODEC_AudioFrame_SLOT_TDMMode In W8994 codec the Audio frame contains 4 slots : TDM Mode
173 * TDM format :
174 * +------------------|------------------|--------------------|-------------------+
175 * | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right | CODEC_SLOT1 Right |
176 * +------------------------------------------------------------------------------+
177 */
178/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */
179#define CODEC_AUDIOFRAME_SLOT_0123 (SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3)
180
181/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */
182#define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2
183/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */
184#define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3
185
186
187#define DMA_MAX_SZE 0xFFFF
188
189/*------------------------------------------------------------------------------
190 CONFIGURATION: Audio Driver Configuration parameters
191------------------------------------------------------------------------------*/
192
193#define AUDIODATA_SIZE 2 /* 16-bits audio data size */
194
195/* Audio status definition */
196#define AUDIO_OK E_OK
197
198/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */
199#define DEFAULT_AUDIO_IN_FREQ BSP_AUDIO_FREQUENCY_16K
200#define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16)
201#define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2) /* Mono = 1, Stereo = 2 */
202#define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)100)
203
204/*------------------------------------------------------------------------------
205 OPTIONAL Configuration defines parameters
206------------------------------------------------------------------------------*/
207
208/* Delay for the Codec to be correctly reset */
209#define CODEC_RESET_DELAY ((uint8_t)5)
210
211
212/*------------------------------------------------------------------------------
213 OUTPUT DEVICES definition
214------------------------------------------------------------------------------*/
215/* Alias on existing output devices to adapt to headphones output */
216#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE
217#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER
218
219#define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE)
220
221/*
222 * STMAUDIOハンドラ定義
223 *
224 */
225typedef struct STAUDIO_Handle_s {
226 I2C_Handle_t *hi2c;
227 AUDIO_Handle_t *hsai;
228 ID saiid;
229 uint8_t i2caddress;
230 uint8_t outputEnabled;
231 uint8_t inputEnabled;
232 uint8_t ColdStartup;
233 uint16_t InputDevice;
234 uint16_t AudioInVolume;
235 void (*audio_fullout_func)(AUDIO_Handle_t *hsai);
236 void (*audio_halfout_func)(AUDIO_Handle_t *hsai);
237 void (*audio_fullin_func)(void *handle);
238 void (*audio_halfin_func)(void *handle);
239 void (*audio_error_func)(AUDIO_Handle_t *hsai);
240} STAUDIO_Handle_t;
241
242
243extern ER staudio_out_init(STAUDIO_Handle_t *haudio, uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq, uint16_t framesize);
244extern void staudio_out_deinit(STAUDIO_Handle_t *haudio);
245extern ER staudio_out_play(STAUDIO_Handle_t *haudio, uint16_t* pBuffer, uint32_t Size);
246extern ER staudio_out_pause(STAUDIO_Handle_t *haudio);
247extern ER staudio_out_resume(STAUDIO_Handle_t *haudio);
248extern ER staudio_out_stop(STAUDIO_Handle_t *haudio, uint32_t Option);
249extern ER staudio_out_setvolume(STAUDIO_Handle_t *haudio, uint8_t Volume);
250extern void staudio_out_setfrequency(STAUDIO_Handle_t *haudio, uint32_t AudioFreq);
251extern void staudio_out_setframeslot(STAUDIO_Handle_t *haudio, uint32_t AudioFrameSlot);
252extern ER staudio_out_setmute(STAUDIO_Handle_t *haudio, uint32_t Cmd);
253extern ER staudio_out_setoutputmode(STAUDIO_Handle_t *haudio, uint8_t Output);
254extern void staudio_out_changebuffer(STAUDIO_Handle_t *haudio, uint16_t *pData, uint16_t Size);
255
256
257extern ER staudio_in_init(STAUDIO_Handle_t *haudio, uint16_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
258uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
259extern ER staudio_in_out_init(STAUDIO_Handle_t *haudio, uint16_t InputDevice, uint16_t OutputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
260extern void staudio_in_deinit(STAUDIO_Handle_t *haudio);
261extern ER staudio_in_record(STAUDIO_Handle_t *haudio, uint16_t* pbuf, uint32_t size);
262extern ER staudio_in_stop(STAUDIO_Handle_t *haudio, uint32_t Option);
263extern ER staudio_in_pause(STAUDIO_Handle_t *haudio);
264extern ER staudio_in_resume(STAUDIO_Handle_t *haudio);
265extern ER staudio_in_setvolume(STAUDIO_Handle_t *haudio, uint8_t Volume);
266
267#ifdef TOPPERS_STM32F769_DISCOVERY
268extern ER BSP_AUDIO_IN_AllocScratch(int32_t *pScratch, uint32_t size);
269extern uint8_t BSP_AUDIO_IN_GetChannelNumber(void);
270#endif
271
272#ifdef __cplusplus
273}
274#endif
275
276#endif /* _STAUDIO_WM8994_H_ */
277
Note: See TracBrowser for help on using the repository browser.