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:
Wed May 03 16:31:59 2017 +0000
Revision:
8:97f177fa3a1c
Parent:
5:2d450bbee471
Adding definition for debugging through an oscilloscope.

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****/