Library to handle the X-NUCLEO-CCA01M1 Sound Terminal Expansion Board.

Dependencies:   ST_I2S X_NUCLEO_COMMON

Dependents:   HelloWorld_CCA01M1 HelloWorld_CCA01M1_mbedOS HelloWorld_CCA01M1_mbedOS Karaoke_CCA01M1_CCA02M1_mbedOS ... more

Fork of X_NUCLEO_CCA01M1 by ST Expansion SW Team

Sound Terminal Library

Library to handle the X-NUCLEO-CCA01M1 Sound Terminal Expansion Board based on the STA350BW Sound Terminal device. A single board allows the output of a standard 2-channel stereo signal, while two boards stacked up realize a 4-channel audio system.


Power supply

The X-NUCLEO-CCA01M1 Sound Terminal Expansion Board has to be powered with at least 5V DC. You can connect the VCC terminal to an external power supplier or directly to the +5V pin of the CN6 Arduino connector.


Platform compatibility

  • This board can be currently used with the Nucleo F4 Family only, please see the ST_I2S library compatibility for further information.
  • The library is compatible both with mbed OS 5.x and mbed classic 2.x (to work with mbed classic, the main application has to import the "events" library, which is not included into the "mbed" library).


I2S Peripheral Usage

This board makes use of an I2S peripheral available on Nucleo boards, and when stacked up two times on the same Nucleo board each expansion board have to be configured to use a different I2S peripheral.

By default it comes with solder bridges configured to use the I2S1 peripheral, as depicted here below:

/media/uploads/Davidroid/solder_bridges_i2s1.png

And can be set to use the I2S2 peripheral by configuring the solder bridges this way:

/media/uploads/Davidroid/solder_bridges_i2s2.png


Committer:
davide.aliprandi@st.com
Date:
Fri Feb 10 17:29:23 2017 +0100
Revision:
0:542c79e7e0ef
First version of the library.

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