sd + skpeaker
Dependencies: ST_I2S X_NUCLEO_COMMON
Fork of X_NUCLEO_CCA01M1 by
Components/STA350BW/STA350BW.h@8:97f177fa3a1c, 2017-05-03 (annotated)
- 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?
User | Revision | Line number | New 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>© 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****/ |