sd + skpeaker

Dependencies:   ST_I2S X_NUCLEO_COMMON

Fork of X_NUCLEO_CCA01M1 by ST

Committer:
davide.aliprandi@st.com
Date:
Fri Apr 21 10:07:28 2017 +0200
Revision:
3:c688a4acb4bf
Parent:
0:542c79e7e0ef
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****/