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:
Davidroid
Date:
Fri Apr 21 08:15:15 2017 +0000
Revision:
5:2d450bbee471
Parent:
Components/sta350bw/sta350bw.h@3:c688a4acb4bf
Child:
8:97f177fa3a1c
Aligned to ARM mbed coding style.

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