sd + skpeaker

Dependencies:   ST_I2S X_NUCLEO_COMMON

Fork of X_NUCLEO_CCA01M1 by ST

Committer:
vidica94
Date:
Wed Jan 10 10:34:33 2018 +0000
Revision:
12:aef84cf5e74b
Parent:
8:97f177fa3a1c
d;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 0:542c79e7e0ef 1 /**
davide.aliprandi@st.com 0:542c79e7e0ef 2 ******************************************************************************
davide.aliprandi@st.com 0:542c79e7e0ef 3 * @file STA350BW.h
davide.aliprandi@st.com 0:542c79e7e0ef 4 * @author Central Labs
davide.aliprandi@st.com 0:542c79e7e0ef 5 * @version V1.0.0
davide.aliprandi@st.com 0:542c79e7e0ef 6 * @date 18-August-2015
davide.aliprandi@st.com 3:c688a4acb4bf 7 * @brief This file provides the STA350BW SOUND TERMINAL audio driver.
davide.aliprandi@st.com 0:542c79e7e0ef 8 ******************************************************************************
davide.aliprandi@st.com 0:542c79e7e0ef 9 * @attention
davide.aliprandi@st.com 0:542c79e7e0ef 10 *
davide.aliprandi@st.com 0:542c79e7e0ef 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
davide.aliprandi@st.com 0:542c79e7e0ef 12 *
davide.aliprandi@st.com 0:542c79e7e0ef 13 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 0:542c79e7e0ef 14 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 0:542c79e7e0ef 15 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 0:542c79e7e0ef 16 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 0:542c79e7e0ef 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 0:542c79e7e0ef 18 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 0:542c79e7e0ef 19 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 0:542c79e7e0ef 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 0:542c79e7e0ef 21 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 0:542c79e7e0ef 22 * without specific prior written permission.
davide.aliprandi@st.com 0:542c79e7e0ef 23 *
davide.aliprandi@st.com 0:542c79e7e0ef 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 0:542c79e7e0ef 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 0:542c79e7e0ef 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 0:542c79e7e0ef 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 0:542c79e7e0ef 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 0:542c79e7e0ef 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 0:542c79e7e0ef 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 0:542c79e7e0ef 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 0:542c79e7e0ef 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 0:542c79e7e0ef 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 0:542c79e7e0ef 34 *
davide.aliprandi@st.com 0:542c79e7e0ef 35 ******************************************************************************
davide.aliprandi@st.com 0:542c79e7e0ef 36 */
davide.aliprandi@st.com 0:542c79e7e0ef 37
davide.aliprandi@st.com 0:542c79e7e0ef 38
davide.aliprandi@st.com 3:c688a4acb4bf 39 /* Generated with STM32CubeTOO -----------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 40
davide.aliprandi@st.com 3:c688a4acb4bf 41
davide.aliprandi@st.com 3:c688a4acb4bf 42 /* Revision ------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 43 /*
davide.aliprandi@st.com 3:c688a4acb4bf 44 Repository: http://svn.x-nucleodev.codex.cro.st.com/svnroot/X-NucleoDev
davide.aliprandi@st.com 3:c688a4acb4bf 45 Branch/Trunk/Tag: trunk
davide.aliprandi@st.com 3:c688a4acb4bf 46 Based on: X-CUBE-SOUNDTER1/trunk/Drivers/BSP/Components/STA350BW/STA350BW.h
davide.aliprandi@st.com 3:c688a4acb4bf 47 Revision: 0
davide.aliprandi@st.com 3:c688a4acb4bf 48 */
davide.aliprandi@st.com 3:c688a4acb4bf 49
davide.aliprandi@st.com 3:c688a4acb4bf 50
davide.aliprandi@st.com 0:542c79e7e0ef 51 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 0:542c79e7e0ef 52
davide.aliprandi@st.com 3:c688a4acb4bf 53 #ifndef __STA350BW_CLASS_H
davide.aliprandi@st.com 3:c688a4acb4bf 54 #define __STA350BW_CLASS_H
davide.aliprandi@st.com 0:542c79e7e0ef 55
davide.aliprandi@st.com 0:542c79e7e0ef 56
Davidroid 8:97f177fa3a1c 57 /* Configuration -------------------------------------------------------------*/
Davidroid 8:97f177fa3a1c 58
Davidroid 8:97f177fa3a1c 59 /**
Davidroid 8:97f177fa3a1c 60 * Enable to debug the duration of functions related to the I2S and USB usage
Davidroid 8:97f177fa3a1c 61 * through an oscilloscope.
Davidroid 8:97f177fa3a1c 62 */
Davidroid 8:97f177fa3a1c 63 //#define X_NUCLEO_CCA01M1_DEBUG
Davidroid 8:97f177fa3a1c 64
Davidroid 8:97f177fa3a1c 65
davide.aliprandi@st.com 0:542c79e7e0ef 66 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 0:542c79e7e0ef 67
davide.aliprandi@st.com 3:c688a4acb4bf 68 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 69 * Include here platform specific header files. *
davide.aliprandi@st.com 3:c688a4acb4bf 70 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 71 #include "mbed.h"
davide.aliprandi@st.com 3:c688a4acb4bf 72 #include "I2S.h"
davide.aliprandi@st.com 3:c688a4acb4bf 73 #include "DevI2C.h"
davide.aliprandi@st.com 3:c688a4acb4bf 74 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 75 * Include here component specific header files. *
davide.aliprandi@st.com 3:c688a4acb4bf 76 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 77 #include "STA350BW_def.h"
davide.aliprandi@st.com 3:c688a4acb4bf 78 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 79 * Include here interface specific header files. *
davide.aliprandi@st.com 3:c688a4acb4bf 80 * *
davide.aliprandi@st.com 3:c688a4acb4bf 81 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 82 * #include "Humidity_class.h" *
davide.aliprandi@st.com 3:c688a4acb4bf 83 * #include "Temperature_class.h" *
davide.aliprandi@st.com 3:c688a4acb4bf 84 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 85 #include "SoundTerminal.h"
davide.aliprandi@st.com 3:c688a4acb4bf 86
davide.aliprandi@st.com 3:c688a4acb4bf 87
davide.aliprandi@st.com 3:c688a4acb4bf 88 /* Definitions ---------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 89
davide.aliprandi@st.com 3:c688a4acb4bf 90 #define MIN_VOLUME 0
davide.aliprandi@st.com 3:c688a4acb4bf 91 #define MAX_VOLUME 128
davide.aliprandi@st.com 3:c688a4acb4bf 92
davide.aliprandi@st.com 3:c688a4acb4bf 93
davide.aliprandi@st.com 3:c688a4acb4bf 94 /* Classes -------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 95
davide.aliprandi@st.com 3:c688a4acb4bf 96 /**
davide.aliprandi@st.com 3:c688a4acb4bf 97 * @brief Class representing a STA350BW component.
davide.aliprandi@st.com 3:c688a4acb4bf 98 */
davide.aliprandi@st.com 3:c688a4acb4bf 99 class STA350BW : public SoundTerminal
davide.aliprandi@st.com 3:c688a4acb4bf 100 {
davide.aliprandi@st.com 3:c688a4acb4bf 101 public:
davide.aliprandi@st.com 3:c688a4acb4bf 102
davide.aliprandi@st.com 3:c688a4acb4bf 103 /*** Constructor and Destructor Methods ***/
davide.aliprandi@st.com 3:c688a4acb4bf 104
davide.aliprandi@st.com 3:c688a4acb4bf 105 /**
davide.aliprandi@st.com 3:c688a4acb4bf 106 * @brief Constructor.
davide.aliprandi@st.com 3:c688a4acb4bf 107 * @param reset pin name of the RESET pin of the component.
davide.aliprandi@st.com 3:c688a4acb4bf 108 * @param address I2C address of the component.
davide.aliprandi@st.com 3:c688a4acb4bf 109 * @param i2c I2C device to be used for communication.
davide.aliprandi@st.com 3:c688a4acb4bf 110 * @param dpin pin name of the DPIN pin of the I2S device to be used for audio transmission.
davide.aliprandi@st.com 3:c688a4acb4bf 111 * @param clk pin name of the CLK pin of the I2S device to be used for audio transmission.
davide.aliprandi@st.com 3:c688a4acb4bf 112 * @param wsel pin name of the WSEL pin of the I2S device to be used for audio transmission.
davide.aliprandi@st.com 3:c688a4acb4bf 113 * @param fdpin pin name of the FDPIN pin of the I2S device to be used for audio transmission.
davide.aliprandi@st.com 3:c688a4acb4bf 114 * @param mck pin name of the MCK pin of the I2S device to be used for audio transmission.
davide.aliprandi@st.com 3:c688a4acb4bf 115 * @note Initialization depends on the I2S interface you wish to use:
davide.aliprandi@st.com 3:c688a4acb4bf 116 * I2S1) address = STA350BW_ADDRESS_1, dpin = PB_15, clk = PB_13, wsel = PB_12, fdpin = NC, mck = PC_6;
davide.aliprandi@st.com 3:c688a4acb4bf 117 * I2S2) address = STA350BW_ADDRESS_2, dpin = PC_12, clk = PC_10, wsel = PA_4, fdpin = NC, mck = PC_7.
davide.aliprandi@st.com 3:c688a4acb4bf 118 */
davide.aliprandi@st.com 3:c688a4acb4bf 119 STA350BW(PinName reset, uint8_t address, DevI2C &i2c, PinName dpin, PinName clk, PinName wsel, PinName fdpin = NC, PinName mck = NC) :
davide.aliprandi@st.com 3:c688a4acb4bf 120 SoundTerminal(),
davide.aliprandi@st.com 3:c688a4acb4bf 121 _reset(reset),
davide.aliprandi@st.com 3:c688a4acb4bf 122 _address(address),
davide.aliprandi@st.com 3:c688a4acb4bf 123 _dev_i2c(i2c),
davide.aliprandi@st.com 3:c688a4acb4bf 124 dev_i2s(dpin, clk, wsel, fdpin, mck),
davide.aliprandi@st.com 3:c688a4acb4bf 125 _PCM_buffer(NULL),
davide.aliprandi@st.com 3:c688a4acb4bf 126 _PCM_buffer_bytes(0),
davide.aliprandi@st.com 3:c688a4acb4bf 127 _loop(false)
davide.aliprandi@st.com 3:c688a4acb4bf 128 #ifdef X_NUCLEO_CCA01M1_DEBUG
davide.aliprandi@st.com 3:c688a4acb4bf 129 , _i2s_signal(D11)
davide.aliprandi@st.com 3:c688a4acb4bf 130 #endif
davide.aliprandi@st.com 3:c688a4acb4bf 131 {
davide.aliprandi@st.com 3:c688a4acb4bf 132 /* ACTION 4 ----------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 133 * Initialize here the component's member variables, one variable per *
davide.aliprandi@st.com 3:c688a4acb4bf 134 * line. *
davide.aliprandi@st.com 3:c688a4acb4bf 135 * *
davide.aliprandi@st.com 3:c688a4acb4bf 136 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 137 * measure = 0; *
davide.aliprandi@st.com 3:c688a4acb4bf 138 * instance_id = number_of_instances++; *
davide.aliprandi@st.com 3:c688a4acb4bf 139 *--------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 140 }
davide.aliprandi@st.com 3:c688a4acb4bf 141
davide.aliprandi@st.com 3:c688a4acb4bf 142 /**
davide.aliprandi@st.com 3:c688a4acb4bf 143 * @brief Destructor.
davide.aliprandi@st.com 3:c688a4acb4bf 144 */
davide.aliprandi@st.com 3:c688a4acb4bf 145 virtual ~STA350BW(void) {}
davide.aliprandi@st.com 3:c688a4acb4bf 146
davide.aliprandi@st.com 3:c688a4acb4bf 147
davide.aliprandi@st.com 3:c688a4acb4bf 148 /*** Public Component Related Methods ***/
davide.aliprandi@st.com 3:c688a4acb4bf 149
davide.aliprandi@st.com 3:c688a4acb4bf 150 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 151 * Implement here the component's public methods, as wrappers of the C *
davide.aliprandi@st.com 3:c688a4acb4bf 152 * component's functions. *
davide.aliprandi@st.com 3:c688a4acb4bf 153 * They should be: *
davide.aliprandi@st.com 3:c688a4acb4bf 154 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 3:c688a4acb4bf 155 * functions (1); *
davide.aliprandi@st.com 3:c688a4acb4bf 156 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 3:c688a4acb4bf 157 * table's functions, if any (2). *
davide.aliprandi@st.com 3:c688a4acb4bf 158 * *
davide.aliprandi@st.com 3:c688a4acb4bf 159 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 160 * virtual int GetValue(float *f) //(1) *
davide.aliprandi@st.com 3:c688a4acb4bf 161 * { *
davide.aliprandi@st.com 3:c688a4acb4bf 162 * return COMPONENT_GetValue(float *f); *
davide.aliprandi@st.com 3:c688a4acb4bf 163 * } *
davide.aliprandi@st.com 3:c688a4acb4bf 164 * *
davide.aliprandi@st.com 3:c688a4acb4bf 165 * virtual int EnableFeature(void) //(2) *
davide.aliprandi@st.com 3:c688a4acb4bf 166 * { *
davide.aliprandi@st.com 3:c688a4acb4bf 167 * return COMPONENT_EnableFeature(); *
davide.aliprandi@st.com 3:c688a4acb4bf 168 * } *
davide.aliprandi@st.com 3:c688a4acb4bf 169 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 170 /**
davide.aliprandi@st.com 3:c688a4acb4bf 171 * @brief Initializing the STA350BW component.
davide.aliprandi@st.com 3:c688a4acb4bf 172 * @param init Pointer to device specific initalization structure.
davide.aliprandi@st.com 3:c688a4acb4bf 173 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 174 */
davide.aliprandi@st.com 3:c688a4acb4bf 175 virtual int init(void *init = NULL)
davide.aliprandi@st.com 3:c688a4acb4bf 176 {
davide.aliprandi@st.com 3:c688a4acb4bf 177 if (STA350BW_Init((void *) init) != COMPONENT_OK)
davide.aliprandi@st.com 3:c688a4acb4bf 178 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 179
davide.aliprandi@st.com 3:c688a4acb4bf 180 /* Setting I2S parameters. */
davide.aliprandi@st.com 3:c688a4acb4bf 181 dev_i2s.mode(MASTER_TX, true);
davide.aliprandi@st.com 3:c688a4acb4bf 182
davide.aliprandi@st.com 3:c688a4acb4bf 183 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 184 }
davide.aliprandi@st.com 3:c688a4acb4bf 185
davide.aliprandi@st.com 3:c688a4acb4bf 186 /**
davide.aliprandi@st.com 3:c688a4acb4bf 187 * @brief Getting the ID of the component.
davide.aliprandi@st.com 3:c688a4acb4bf 188 * @param id Pointer to an allocated variable to store the ID into.
davide.aliprandi@st.com 3:c688a4acb4bf 189 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 190 */
davide.aliprandi@st.com 3:c688a4acb4bf 191 virtual int read_id(uint8_t *id = NULL)
davide.aliprandi@st.com 3:c688a4acb4bf 192 {
davide.aliprandi@st.com 3:c688a4acb4bf 193 return (int) STA350BW_ReadID((uint8_t *) id);
davide.aliprandi@st.com 3:c688a4acb4bf 194 }
davide.aliprandi@st.com 3:c688a4acb4bf 195
davide.aliprandi@st.com 3:c688a4acb4bf 196 /**
davide.aliprandi@st.com 3:c688a4acb4bf 197 * @brief De-initializing the STA350BW component.
davide.aliprandi@st.com 3:c688a4acb4bf 198 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 199 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 200 */
davide.aliprandi@st.com 3:c688a4acb4bf 201 virtual int32_t de_init(void)
davide.aliprandi@st.com 3:c688a4acb4bf 202 {
davide.aliprandi@st.com 3:c688a4acb4bf 203 return (int32_t) STA350BW_DeInit();
davide.aliprandi@st.com 3:c688a4acb4bf 204 }
davide.aliprandi@st.com 3:c688a4acb4bf 205
davide.aliprandi@st.com 3:c688a4acb4bf 206 /*
davide.aliprandi@st.com 3:c688a4acb4bf 207 * @brief Start playing audio.
davide.aliprandi@st.com 3:c688a4acb4bf 208 * @param PCM_buffer The buffer of data to be played.
davide.aliprandi@st.com 3:c688a4acb4bf 209 * @param PCM_buffer_bytes The size in bytes of the buffer of data to be played.
davide.aliprandi@st.com 3:c688a4acb4bf 210 * @param loop Loops indefinitely if true, just once otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 211 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 212 */
davide.aliprandi@st.com 3:c688a4acb4bf 213 virtual int32_t play(int16_t *PCM_buffer, uint16_t PCM_buffer_bytes, bool loop = false)
davide.aliprandi@st.com 3:c688a4acb4bf 214 {
davide.aliprandi@st.com 3:c688a4acb4bf 215 /* Storing data. */
davide.aliprandi@st.com 3:c688a4acb4bf 216 _PCM_buffer = PCM_buffer;
davide.aliprandi@st.com 3:c688a4acb4bf 217 _PCM_buffer_bytes = PCM_buffer_bytes;
davide.aliprandi@st.com 3:c688a4acb4bf 218 _loop = loop;
davide.aliprandi@st.com 3:c688a4acb4bf 219
davide.aliprandi@st.com 3:c688a4acb4bf 220 /* Sending data to the speakers via I2S. */
davide.aliprandi@st.com 3:c688a4acb4bf 221 int res = dev_i2s.transfer(
davide.aliprandi@st.com 3:c688a4acb4bf 222 (void *) _PCM_buffer, _PCM_buffer_bytes,
davide.aliprandi@st.com 3:c688a4acb4bf 223 (void *) NULL, 0,
davide.aliprandi@st.com 3:c688a4acb4bf 224 event_callback_t(this, &STA350BW::i2s_callback),
davide.aliprandi@st.com 3:c688a4acb4bf 225 I2S_EVENT_ALL
davide.aliprandi@st.com 3:c688a4acb4bf 226 );
davide.aliprandi@st.com 3:c688a4acb4bf 227 if (res != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 228 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 229
davide.aliprandi@st.com 3:c688a4acb4bf 230 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 231 }
davide.aliprandi@st.com 3:c688a4acb4bf 232
davide.aliprandi@st.com 3:c688a4acb4bf 233 /*
davide.aliprandi@st.com 3:c688a4acb4bf 234 * @brief Stop playing audio.
davide.aliprandi@st.com 3:c688a4acb4bf 235 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 236 * @retval None.
davide.aliprandi@st.com 3:c688a4acb4bf 237 */
davide.aliprandi@st.com 3:c688a4acb4bf 238 virtual int32_t stop(void)
davide.aliprandi@st.com 3:c688a4acb4bf 239 {
davide.aliprandi@st.com 3:c688a4acb4bf 240 dev_i2s.abort_all_transfers();
davide.aliprandi@st.com 3:c688a4acb4bf 241 return (int32_t) STA350BW_Stop();
davide.aliprandi@st.com 3:c688a4acb4bf 242 }
davide.aliprandi@st.com 3:c688a4acb4bf 243
davide.aliprandi@st.com 3:c688a4acb4bf 244 /*
davide.aliprandi@st.com 3:c688a4acb4bf 245 * @brief Set the volume of the audio.
davide.aliprandi@st.com 3:c688a4acb4bf 246 * @param channel The channel on which to set the volume of the audio.
davide.aliprandi@st.com 3:c688a4acb4bf 247 * @param value The value of the volume in the range [MIN_VOLUME..MAX_VOLUME].
davide.aliprandi@st.com 3:c688a4acb4bf 248 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 249 */
davide.aliprandi@st.com 3:c688a4acb4bf 250 virtual int32_t set_volume(uint8_t channel, uint8_t value)
davide.aliprandi@st.com 3:c688a4acb4bf 251 {
davide.aliprandi@st.com 3:c688a4acb4bf 252 if (!(value >= MIN_VOLUME && value <= MAX_VOLUME))
davide.aliprandi@st.com 3:c688a4acb4bf 253 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 254
davide.aliprandi@st.com 3:c688a4acb4bf 255 return (int32_t) STA350BW_SetVolume((uint8_t) channel, (uint8_t) MAX_VOLUME - value);
davide.aliprandi@st.com 3:c688a4acb4bf 256 }
davide.aliprandi@st.com 3:c688a4acb4bf 257
davide.aliprandi@st.com 3:c688a4acb4bf 258 /*
davide.aliprandi@st.com 3:c688a4acb4bf 259 * @brief Set the frequency of the audio.
davide.aliprandi@st.com 3:c688a4acb4bf 260 * @param audio_freq The frequency of the audio.
davide.aliprandi@st.com 3:c688a4acb4bf 261 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 262 */
davide.aliprandi@st.com 3:c688a4acb4bf 263 virtual int32_t set_frequency(uint32_t audio_freq)
davide.aliprandi@st.com 3:c688a4acb4bf 264 {
davide.aliprandi@st.com 3:c688a4acb4bf 265 return (int32_t) STA350BW_SetFrequency((uint32_t) audio_freq);
davide.aliprandi@st.com 3:c688a4acb4bf 266 }
davide.aliprandi@st.com 3:c688a4acb4bf 267
davide.aliprandi@st.com 3:c688a4acb4bf 268
davide.aliprandi@st.com 3:c688a4acb4bf 269 /*** Public Interrupt Related Methods ***/
davide.aliprandi@st.com 0:542c79e7e0ef 270
davide.aliprandi@st.com 3:c688a4acb4bf 271 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 272 * Implement here interrupt related methods, if any. *
davide.aliprandi@st.com 3:c688a4acb4bf 273 * Note that interrupt handling is platform dependent, e.g.: *
davide.aliprandi@st.com 3:c688a4acb4bf 274 * + mbed: *
davide.aliprandi@st.com 3:c688a4acb4bf 275 * InterruptIn feature_irq(pin); //Interrupt object. *
davide.aliprandi@st.com 3:c688a4acb4bf 276 * feature_irq.fall(callback); //Attach a callback. *
davide.aliprandi@st.com 3:c688a4acb4bf 277 * feature_irq.mode(PullNone); //Set interrupt mode. *
davide.aliprandi@st.com 3:c688a4acb4bf 278 * feature_irq.enable_irq(); //Enable interrupt. *
davide.aliprandi@st.com 3:c688a4acb4bf 279 * feature_irq.disable_irq(); //Disable interrupt. *
davide.aliprandi@st.com 3:c688a4acb4bf 280 * + Arduino: *
davide.aliprandi@st.com 3:c688a4acb4bf 281 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
davide.aliprandi@st.com 3:c688a4acb4bf 282 * detachInterrupt(pin); //Detach a callback. *
davide.aliprandi@st.com 3:c688a4acb4bf 283 * *
davide.aliprandi@st.com 3:c688a4acb4bf 284 * Example (mbed): *
davide.aliprandi@st.com 3:c688a4acb4bf 285 * void AttachFeatureIRQ(void (*fptr) (void)) *
davide.aliprandi@st.com 3:c688a4acb4bf 286 * { *
davide.aliprandi@st.com 3:c688a4acb4bf 287 * feature_irq.fall(fptr); *
davide.aliprandi@st.com 3:c688a4acb4bf 288 * } *
davide.aliprandi@st.com 3:c688a4acb4bf 289 * *
davide.aliprandi@st.com 3:c688a4acb4bf 290 * void EnableFeatureIRQ(void) *
davide.aliprandi@st.com 3:c688a4acb4bf 291 * { *
davide.aliprandi@st.com 3:c688a4acb4bf 292 * feature_irq.enable_irq(); *
davide.aliprandi@st.com 3:c688a4acb4bf 293 * } *
davide.aliprandi@st.com 3:c688a4acb4bf 294 * *
davide.aliprandi@st.com 3:c688a4acb4bf 295 * void DisableFeatureIRQ(void) *
davide.aliprandi@st.com 3:c688a4acb4bf 296 * { *
davide.aliprandi@st.com 3:c688a4acb4bf 297 * feature_irq.disable_irq(); *
davide.aliprandi@st.com 3:c688a4acb4bf 298 * } *
davide.aliprandi@st.com 3:c688a4acb4bf 299 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 300
davide.aliprandi@st.com 3:c688a4acb4bf 301
davide.aliprandi@st.com 3:c688a4acb4bf 302 protected:
davide.aliprandi@st.com 3:c688a4acb4bf 303
davide.aliprandi@st.com 3:c688a4acb4bf 304 /*** Protected Component Related Methods ***/
davide.aliprandi@st.com 0:542c79e7e0ef 305
davide.aliprandi@st.com 3:c688a4acb4bf 306 /* ACTION 7 --------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 307 * Declare here the component's specific methods. *
davide.aliprandi@st.com 3:c688a4acb4bf 308 * They should be: *
davide.aliprandi@st.com 3:c688a4acb4bf 309 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 3:c688a4acb4bf 310 * functions (1); *
davide.aliprandi@st.com 3:c688a4acb4bf 311 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 3:c688a4acb4bf 312 * table's functions, if any (2); *
davide.aliprandi@st.com 3:c688a4acb4bf 313 * + Helper methods, if any, like functions declared in the component's *
davide.aliprandi@st.com 3:c688a4acb4bf 314 * source files but not pointed by the component's virtual table (3). *
davide.aliprandi@st.com 3:c688a4acb4bf 315 * *
davide.aliprandi@st.com 3:c688a4acb4bf 316 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 317 * status_t COMPONENT_GetValue(float *f); //(1) *
davide.aliprandi@st.com 3:c688a4acb4bf 318 * status_t COMPONENT_EnableFeature(void); //(2) *
davide.aliprandi@st.com 3:c688a4acb4bf 319 * status_t COMPONENT_ComputeAverage(void); //(3) *
davide.aliprandi@st.com 3:c688a4acb4bf 320 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 321 int32_t STA350BW_Init(void *init);
davide.aliprandi@st.com 3:c688a4acb4bf 322 int32_t STA350BW_ReadID(uint8_t *id);
davide.aliprandi@st.com 3:c688a4acb4bf 323 int32_t STA350BW_DeInit(void);
davide.aliprandi@st.com 3:c688a4acb4bf 324 int32_t STA350BW_Play(int16_t *pData, uint16_t Size);
davide.aliprandi@st.com 3:c688a4acb4bf 325 int32_t STA350BW_Stop(void);
davide.aliprandi@st.com 3:c688a4acb4bf 326 int32_t STA350BW_Pause(void);
davide.aliprandi@st.com 3:c688a4acb4bf 327 int32_t STA350BW_Resume(void);
davide.aliprandi@st.com 3:c688a4acb4bf 328 int32_t STA350BW_SetVolume(uint8_t channel, uint8_t value);
davide.aliprandi@st.com 3:c688a4acb4bf 329 int32_t STA350BW_SetFrequency(uint32_t audio_freq);
davide.aliprandi@st.com 3:c688a4acb4bf 330 int32_t STA350BW_PowerOn(void);
davide.aliprandi@st.com 3:c688a4acb4bf 331 int32_t STA350BW_PowerOff(void);
davide.aliprandi@st.com 3:c688a4acb4bf 332 int32_t STA350BW_Reset(void);
davide.aliprandi@st.com 3:c688a4acb4bf 333 int32_t STA350BW_SetEq(uint8_t ram_block, uint8_t filter_number, uint32_t * filter_values);
davide.aliprandi@st.com 3:c688a4acb4bf 334 int32_t STA350BW_SetTone(uint8_t tone_gain);
davide.aliprandi@st.com 3:c688a4acb4bf 335 int32_t STA350BW_SetMute(uint8_t channel, uint8_t state);
davide.aliprandi@st.com 3:c688a4acb4bf 336 int32_t STA350BW_SetDSPOption(uint8_t option, uint8_t state);
davide.aliprandi@st.com 3:c688a4acb4bf 337 int32_t STA350BW_WriteRAMSet(uint8_t RAM_block, uint8_t RAM_address, uint8_t * pIn);
davide.aliprandi@st.com 3:c688a4acb4bf 338
davide.aliprandi@st.com 3:c688a4acb4bf 339 /**
davide.aliprandi@st.com 3:c688a4acb4bf 340 * @brief I2S callback.
davide.aliprandi@st.com 3:c688a4acb4bf 341 * @param narg Narg flag.
davide.aliprandi@st.com 3:c688a4acb4bf 342 * @retval None.
davide.aliprandi@st.com 3:c688a4acb4bf 343 */
davide.aliprandi@st.com 3:c688a4acb4bf 344 void i2s_callback(int narg)
davide.aliprandi@st.com 3:c688a4acb4bf 345 {
davide.aliprandi@st.com 3:c688a4acb4bf 346 if (!(narg & (I2S_EVENT_TX_COMPLETE | I2S_EVENT_TX_HALF_COMPLETE)))
davide.aliprandi@st.com 3:c688a4acb4bf 347 error("Unexpected transmission event.\r\n");
davide.aliprandi@st.com 3:c688a4acb4bf 348 else if ((narg & I2S_EVENT_TX_COMPLETE) && !_loop)
davide.aliprandi@st.com 3:c688a4acb4bf 349 stop();
davide.aliprandi@st.com 3:c688a4acb4bf 350
davide.aliprandi@st.com 3:c688a4acb4bf 351 #ifdef X_NUCLEO_CCA01M1_DEBUG
davide.aliprandi@st.com 3:c688a4acb4bf 352 _i2s_signal = !_i2s_signal;
davide.aliprandi@st.com 3:c688a4acb4bf 353 #endif
davide.aliprandi@st.com 3:c688a4acb4bf 354 }
davide.aliprandi@st.com 3:c688a4acb4bf 355
davide.aliprandi@st.com 3:c688a4acb4bf 356
davide.aliprandi@st.com 3:c688a4acb4bf 357 /*** Component's I/O Methods ***/
davide.aliprandi@st.com 0:542c79e7e0ef 358
davide.aliprandi@st.com 3:c688a4acb4bf 359 /**
davide.aliprandi@st.com 3:c688a4acb4bf 360 * @brief Utility function to read data from STA350BW.
davide.aliprandi@st.com 3:c688a4acb4bf 361 * @param[out] pBuffer pointer to the buffer to read data into.
davide.aliprandi@st.com 3:c688a4acb4bf 362 * @param[in] RegisterAddr specifies the internal address register to read from.
davide.aliprandi@st.com 3:c688a4acb4bf 363 * @param[in] NumBytesToRead number of bytes to read.
davide.aliprandi@st.com 3:c688a4acb4bf 364 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 365 */
davide.aliprandi@st.com 3:c688a4acb4bf 366 status_t read(uint8_t* pBuffer, uint8_t RegisterAddr, uint16_t NumBytesToRead)
davide.aliprandi@st.com 3:c688a4acb4bf 367 {
davide.aliprandi@st.com 3:c688a4acb4bf 368 if (_dev_i2c.i2c_read(pBuffer, _address, RegisterAddr, NumBytesToRead) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 369 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 370 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 371 }
davide.aliprandi@st.com 3:c688a4acb4bf 372
davide.aliprandi@st.com 3:c688a4acb4bf 373 /**
davide.aliprandi@st.com 3:c688a4acb4bf 374 * @brief Utility function to write data to STA350BW.
davide.aliprandi@st.com 3:c688a4acb4bf 375 * @param[in] pBuffer pointer to the buffer of data to send.
davide.aliprandi@st.com 3:c688a4acb4bf 376 * @param[in] RegisterAddr specifies the internal address register to write to.
davide.aliprandi@st.com 3:c688a4acb4bf 377 * @param[in] NumBytesToWrite number of bytes to write.
davide.aliprandi@st.com 3:c688a4acb4bf 378 * @retval COMPONENT_OK in case of success, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 379 */
davide.aliprandi@st.com 3:c688a4acb4bf 380 status_t write(uint8_t* pBuffer, uint8_t RegisterAddr, uint16_t NumBytesToWrite)
davide.aliprandi@st.com 3:c688a4acb4bf 381 {
davide.aliprandi@st.com 3:c688a4acb4bf 382 if (_dev_i2c.i2c_write(pBuffer, _address, RegisterAddr, NumBytesToWrite) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 383 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 384 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 385 }
davide.aliprandi@st.com 3:c688a4acb4bf 386
davide.aliprandi@st.com 3:c688a4acb4bf 387 /* ACTION 8 --------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 388 * Implement here other I/O methods beyond those already implemented *
davide.aliprandi@st.com 3:c688a4acb4bf 389 * above, which are declared extern within the component's header file. *
davide.aliprandi@st.com 3:c688a4acb4bf 390 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 391 uint8_t STA350BW_IO_Init(void)
davide.aliprandi@st.com 3:c688a4acb4bf 392 {
davide.aliprandi@st.com 3:c688a4acb4bf 393 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 394 return (uint8_t) 0;
davide.aliprandi@st.com 3:c688a4acb4bf 395 }
davide.aliprandi@st.com 3:c688a4acb4bf 396
davide.aliprandi@st.com 3:c688a4acb4bf 397 uint8_t STA350BW_IO_Read(uint8_t reg, uint8_t *value)
davide.aliprandi@st.com 3:c688a4acb4bf 398 {
davide.aliprandi@st.com 3:c688a4acb4bf 399 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 400 return (uint8_t) read(value, reg, 1);
davide.aliprandi@st.com 3:c688a4acb4bf 401 }
davide.aliprandi@st.com 3:c688a4acb4bf 402
davide.aliprandi@st.com 3:c688a4acb4bf 403 uint8_t STA350BW_IO_Write(uint8_t reg, uint8_t value)
davide.aliprandi@st.com 3:c688a4acb4bf 404 {
davide.aliprandi@st.com 3:c688a4acb4bf 405 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 406 return (uint8_t) write(&value, reg, 1);
davide.aliprandi@st.com 3:c688a4acb4bf 407 }
davide.aliprandi@st.com 3:c688a4acb4bf 408
davide.aliprandi@st.com 3:c688a4acb4bf 409 uint8_t STA350BW_IO_ReadMulti(uint8_t *pBuffer, uint8_t reg, uint16_t length)
davide.aliprandi@st.com 3:c688a4acb4bf 410 {
davide.aliprandi@st.com 3:c688a4acb4bf 411 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 412 return (uint8_t) read(pBuffer, reg, length);
davide.aliprandi@st.com 3:c688a4acb4bf 413 }
davide.aliprandi@st.com 3:c688a4acb4bf 414
davide.aliprandi@st.com 3:c688a4acb4bf 415 uint8_t STA350BW_IO_WriteMulti(uint8_t *pBuffer, uint8_t reg, uint16_t length)
davide.aliprandi@st.com 3:c688a4acb4bf 416 {
davide.aliprandi@st.com 3:c688a4acb4bf 417 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 418 return (uint8_t) write(pBuffer, reg, length);
davide.aliprandi@st.com 3:c688a4acb4bf 419 }
davide.aliprandi@st.com 3:c688a4acb4bf 420
davide.aliprandi@st.com 3:c688a4acb4bf 421 uint8_t STA350BW_IO_Delay(uint32_t delay_ms)
davide.aliprandi@st.com 3:c688a4acb4bf 422 {
davide.aliprandi@st.com 3:c688a4acb4bf 423 /* TO BE IMPLEMENTED BY USING TARGET PLATFORM'S APIs. */
davide.aliprandi@st.com 3:c688a4acb4bf 424 wait_ms(delay_ms);
davide.aliprandi@st.com 3:c688a4acb4bf 425 return (uint8_t) 0;
davide.aliprandi@st.com 3:c688a4acb4bf 426 }
davide.aliprandi@st.com 3:c688a4acb4bf 427
davide.aliprandi@st.com 0:542c79e7e0ef 428
davide.aliprandi@st.com 3:c688a4acb4bf 429 /*** Component's Instance Variables ***/
davide.aliprandi@st.com 3:c688a4acb4bf 430
davide.aliprandi@st.com 3:c688a4acb4bf 431 /* ACTION 9 --------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 432 * Declare here interrupt related variables, if needed. *
davide.aliprandi@st.com 3:c688a4acb4bf 433 * Note that interrupt handling is platform dependent, see *
davide.aliprandi@st.com 3:c688a4acb4bf 434 * "Interrupt Related Methods" above. *
davide.aliprandi@st.com 3:c688a4acb4bf 435 * *
davide.aliprandi@st.com 3:c688a4acb4bf 436 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 437 * + mbed: *
davide.aliprandi@st.com 3:c688a4acb4bf 438 * InterruptIn feature_irq; *
davide.aliprandi@st.com 3:c688a4acb4bf 439 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 440
davide.aliprandi@st.com 3:c688a4acb4bf 441 /* ACTION 10 -------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 442 * Declare here other pin related variables, if needed. *
davide.aliprandi@st.com 3:c688a4acb4bf 443 * *
davide.aliprandi@st.com 3:c688a4acb4bf 444 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 445 * + mbed: *
davide.aliprandi@st.com 3:c688a4acb4bf 446 * DigitalOut standby_reset; *
davide.aliprandi@st.com 3:c688a4acb4bf 447 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 448 DigitalOut _reset;
davide.aliprandi@st.com 3:c688a4acb4bf 449
davide.aliprandi@st.com 3:c688a4acb4bf 450 /* ACTION 11 -------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 451 * Declare here communication related variables, if needed. *
davide.aliprandi@st.com 3:c688a4acb4bf 452 * *
davide.aliprandi@st.com 3:c688a4acb4bf 453 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 454 * + mbed: *
davide.aliprandi@st.com 3:c688a4acb4bf 455 * DigitalOut address; *
davide.aliprandi@st.com 3:c688a4acb4bf 456 * DevI2C &dev_i2c; *
davide.aliprandi@st.com 3:c688a4acb4bf 457 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 458 /* Configuration. */
davide.aliprandi@st.com 3:c688a4acb4bf 459 uint8_t _address;
davide.aliprandi@st.com 3:c688a4acb4bf 460
davide.aliprandi@st.com 3:c688a4acb4bf 461 /* IO Device. */
davide.aliprandi@st.com 3:c688a4acb4bf 462 DevI2C &_dev_i2c;
davide.aliprandi@st.com 3:c688a4acb4bf 463
davide.aliprandi@st.com 3:c688a4acb4bf 464 public:
davide.aliprandi@st.com 3:c688a4acb4bf 465
davide.aliprandi@st.com 3:c688a4acb4bf 466 /* I2S Audio Device (exclusive). */
davide.aliprandi@st.com 3:c688a4acb4bf 467 I2S dev_i2s;
davide.aliprandi@st.com 3:c688a4acb4bf 468
davide.aliprandi@st.com 3:c688a4acb4bf 469
davide.aliprandi@st.com 3:c688a4acb4bf 470 protected:
davide.aliprandi@st.com 3:c688a4acb4bf 471
davide.aliprandi@st.com 3:c688a4acb4bf 472 /* ACTION 12 -------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 473 * Declare here identity related variables, if needed. *
davide.aliprandi@st.com 3:c688a4acb4bf 474 * Note that there should be only a unique identifier for each component, *
davide.aliprandi@st.com 3:c688a4acb4bf 475 * which should be the "who_am_i" parameter. *
davide.aliprandi@st.com 3:c688a4acb4bf 476 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 477
davide.aliprandi@st.com 3:c688a4acb4bf 478 /* ACTION 13 -------------------------------------------------------------*
davide.aliprandi@st.com 3:c688a4acb4bf 479 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 3:c688a4acb4bf 480 * per line. *
davide.aliprandi@st.com 3:c688a4acb4bf 481 * *
davide.aliprandi@st.com 3:c688a4acb4bf 482 * Example: *
davide.aliprandi@st.com 3:c688a4acb4bf 483 * float measure; *
davide.aliprandi@st.com 3:c688a4acb4bf 484 * int instance_id; *
davide.aliprandi@st.com 3:c688a4acb4bf 485 * static int number_of_instances; *
davide.aliprandi@st.com 3:c688a4acb4bf 486 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 487 /* Buffer of data to be played. */
davide.aliprandi@st.com 3:c688a4acb4bf 488 int16_t *_PCM_buffer;
davide.aliprandi@st.com 3:c688a4acb4bf 489 /* The size in bytes of the buffer of data to be played. */
davide.aliprandi@st.com 3:c688a4acb4bf 490 uint16_t _PCM_buffer_bytes;
davide.aliprandi@st.com 3:c688a4acb4bf 491 /* Loops indefinitely if true, just once otherwise. */
davide.aliprandi@st.com 3:c688a4acb4bf 492 bool _loop;
davide.aliprandi@st.com 3:c688a4acb4bf 493
davide.aliprandi@st.com 3:c688a4acb4bf 494 #ifdef X_NUCLEO_CCA01M1_DEBUG
davide.aliprandi@st.com 3:c688a4acb4bf 495 /* Signals for debugging purposes. */
davide.aliprandi@st.com 3:c688a4acb4bf 496 DigitalOut _i2s_signal;
davide.aliprandi@st.com 0:542c79e7e0ef 497 #endif
davide.aliprandi@st.com 3:c688a4acb4bf 498 };
davide.aliprandi@st.com 0:542c79e7e0ef 499
davide.aliprandi@st.com 3:c688a4acb4bf 500 #endif /* __STA350BW_CLASS_H */
davide.aliprandi@st.com 0:542c79e7e0ef 501
davide.aliprandi@st.com 0:542c79e7e0ef 502 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/