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

Dependencies:   ST_I2S X_NUCLEO_COMMON

Dependents:   HelloWorld_CCA01M1 HelloWorld_CCA01M1_mbedOS HelloWorld_CCA01M1_mbedOS Karaoke_CCA01M1_CCA02M1_mbedOS ... more

Fork of X_NUCLEO_CCA01M1 by ST Expansion SW Team

Sound Terminal Library

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


Power supply

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


Platform compatibility

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


I2S Peripheral Usage

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

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

/media/uploads/Davidroid/solder_bridges_i2s1.png

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

/media/uploads/Davidroid/solder_bridges_i2s2.png


Committer:
Davidroid
Date:
Fri Apr 21 08:15:15 2017 +0000
Revision:
5:2d450bbee471
Parent:
Components/sta350bw/STA350BW.cpp@3:c688a4acb4bf
Child:
7:b98581eae911
Aligned to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 3:c688a4acb4bf 1 /**
davide.aliprandi@st.com 3:c688a4acb4bf 2 ******************************************************************************
davide.aliprandi@st.com 3:c688a4acb4bf 3 * @file STA350BW.cpp
davide.aliprandi@st.com 3:c688a4acb4bf 4 * @author Central Labs
davide.aliprandi@st.com 3:c688a4acb4bf 5 * @version V1.0.0
davide.aliprandi@st.com 3:c688a4acb4bf 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 3:c688a4acb4bf 8 ******************************************************************************
davide.aliprandi@st.com 3:c688a4acb4bf 9 * @attention
davide.aliprandi@st.com 3:c688a4acb4bf 10 *
davide.aliprandi@st.com 3:c688a4acb4bf 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
davide.aliprandi@st.com 3:c688a4acb4bf 12 *
davide.aliprandi@st.com 3:c688a4acb4bf 13 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 3:c688a4acb4bf 14 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 3:c688a4acb4bf 15 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 3:c688a4acb4bf 16 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 3:c688a4acb4bf 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 3:c688a4acb4bf 18 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 3:c688a4acb4bf 19 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 3:c688a4acb4bf 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 3:c688a4acb4bf 21 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 3:c688a4acb4bf 22 * without specific prior written permission.
davide.aliprandi@st.com 3:c688a4acb4bf 23 *
davide.aliprandi@st.com 3:c688a4acb4bf 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 3:c688a4acb4bf 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 3:c688a4acb4bf 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 3:c688a4acb4bf 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 3:c688a4acb4bf 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 3:c688a4acb4bf 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 3:c688a4acb4bf 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 3:c688a4acb4bf 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 3:c688a4acb4bf 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 3:c688a4acb4bf 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 3:c688a4acb4bf 34 *
davide.aliprandi@st.com 3:c688a4acb4bf 35 ******************************************************************************
davide.aliprandi@st.com 3:c688a4acb4bf 36 */
davide.aliprandi@st.com 3:c688a4acb4bf 37
davide.aliprandi@st.com 3:c688a4acb4bf 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.c
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 3:c688a4acb4bf 51 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 52
davide.aliprandi@st.com 3:c688a4acb4bf 53 #include "STA350BW.h"
davide.aliprandi@st.com 3:c688a4acb4bf 54
davide.aliprandi@st.com 3:c688a4acb4bf 55
davide.aliprandi@st.com 3:c688a4acb4bf 56 /* Methods -------------------------------------------------------------------*/
davide.aliprandi@st.com 3:c688a4acb4bf 57
davide.aliprandi@st.com 3:c688a4acb4bf 58 /**
davide.aliprandi@st.com 3:c688a4acb4bf 59 * @brief Initializes the STA350BW and the control interface.
davide.aliprandi@st.com 3:c688a4acb4bf 60 * @param init: initialization data.
davide.aliprandi@st.com 3:c688a4acb4bf 61 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 62 */
davide.aliprandi@st.com 3:c688a4acb4bf 63 int32_t STA350BW::STA350BW_Init(void *init)
davide.aliprandi@st.com 3:c688a4acb4bf 64 {
davide.aliprandi@st.com 3:c688a4acb4bf 65 uint8_t tmp = 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 66
davide.aliprandi@st.com 3:c688a4acb4bf 67 /* Reset Audio Device */
davide.aliprandi@st.com 3:c688a4acb4bf 68 _reset = 0;
davide.aliprandi@st.com 3:c688a4acb4bf 69 wait_ms(100);
davide.aliprandi@st.com 3:c688a4acb4bf 70 _reset = 1;
davide.aliprandi@st.com 3:c688a4acb4bf 71
davide.aliprandi@st.com 3:c688a4acb4bf 72 /* Low level I2C init */
davide.aliprandi@st.com 3:c688a4acb4bf 73 STA350BW_IO_Init();
davide.aliprandi@st.com 3:c688a4acb4bf 74
davide.aliprandi@st.com 3:c688a4acb4bf 75 /* Set Master clock depending on sampling frequency */
davide.aliprandi@st.com 3:c688a4acb4bf 76 if (STA350BW_SetFrequency((*((STA350BW_Init_t *) init)).frequency) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 77 {
davide.aliprandi@st.com 3:c688a4acb4bf 78 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 79 }
davide.aliprandi@st.com 3:c688a4acb4bf 80
davide.aliprandi@st.com 3:c688a4acb4bf 81 STA350BW_IO_Delay(500);
davide.aliprandi@st.com 3:c688a4acb4bf 82
davide.aliprandi@st.com 3:c688a4acb4bf 83 /* Read Status Register */
davide.aliprandi@st.com 3:c688a4acb4bf 84 if (STA350BW_IO_Read(STA350BW_STATUS, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 85 {
davide.aliprandi@st.com 3:c688a4acb4bf 86 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 87 }
davide.aliprandi@st.com 3:c688a4acb4bf 88
davide.aliprandi@st.com 3:c688a4acb4bf 89 #if 0
davide.aliprandi@st.com 3:c688a4acb4bf 90 if (tmp != 0x7F)
davide.aliprandi@st.com 3:c688a4acb4bf 91 {
davide.aliprandi@st.com 3:c688a4acb4bf 92 /* Status register highlights undesired behaviour (PLL not locked, ...) */
davide.aliprandi@st.com 3:c688a4acb4bf 93 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 94 }
davide.aliprandi@st.com 3:c688a4acb4bf 95 #else
davide.aliprandi@st.com 3:c688a4acb4bf 96 if ((tmp & ~0x80) != 0x7F)
davide.aliprandi@st.com 3:c688a4acb4bf 97 {
davide.aliprandi@st.com 3:c688a4acb4bf 98 /*Status register highlights undesired behavior
davide.aliprandi@st.com 3:c688a4acb4bf 99 (betzw: excluding PLL not locked, ...) */
davide.aliprandi@st.com 3:c688a4acb4bf 100 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 101 }
davide.aliprandi@st.com 3:c688a4acb4bf 102 #endif
davide.aliprandi@st.com 3:c688a4acb4bf 103
davide.aliprandi@st.com 3:c688a4acb4bf 104 /* Setup Master volume */
davide.aliprandi@st.com 3:c688a4acb4bf 105 uint8_t value = (*((STA350BW_Init_t *) init)).volume;
davide.aliprandi@st.com 3:c688a4acb4bf 106 if (!(value >= MIN_VOLUME && value <= MAX_VOLUME))
davide.aliprandi@st.com 3:c688a4acb4bf 107 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 108 if (STA350BW_SetVolume(STA350BW_CHANNEL_MASTER, (uint8_t) MAX_VOLUME - value) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 109 {
davide.aliprandi@st.com 3:c688a4acb4bf 110 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 111 }
davide.aliprandi@st.com 3:c688a4acb4bf 112
davide.aliprandi@st.com 3:c688a4acb4bf 113 if (STA350BW_IO_Read(STA350BW_CONF_REGF, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 114 {
davide.aliprandi@st.com 3:c688a4acb4bf 115 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 116 }
davide.aliprandi@st.com 3:c688a4acb4bf 117
davide.aliprandi@st.com 3:c688a4acb4bf 118 #if 0
davide.aliprandi@st.com 3:c688a4acb4bf 119 tmp &= ~0x80;
davide.aliprandi@st.com 3:c688a4acb4bf 120 tmp |= 0x80;
davide.aliprandi@st.com 3:c688a4acb4bf 121
davide.aliprandi@st.com 3:c688a4acb4bf 122 /* Enable Power Out Stage */
davide.aliprandi@st.com 3:c688a4acb4bf 123 if (STA350BW_IO_Write(STA350BW_CONF_REGF, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 124 {
davide.aliprandi@st.com 3:c688a4acb4bf 125 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 126 }
davide.aliprandi@st.com 3:c688a4acb4bf 127 #else
davide.aliprandi@st.com 3:c688a4acb4bf 128 /*Enable Power Out Stage*/
davide.aliprandi@st.com 3:c688a4acb4bf 129 if (STA350BW_PowerOn() != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 130 {
davide.aliprandi@st.com 3:c688a4acb4bf 131 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 132 }
davide.aliprandi@st.com 3:c688a4acb4bf 133
davide.aliprandi@st.com 3:c688a4acb4bf 134 #endif
davide.aliprandi@st.com 3:c688a4acb4bf 135
davide.aliprandi@st.com 3:c688a4acb4bf 136 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 137 }
davide.aliprandi@st.com 3:c688a4acb4bf 138
davide.aliprandi@st.com 3:c688a4acb4bf 139 /**
davide.aliprandi@st.com 3:c688a4acb4bf 140 * @brief Deinitializes the STA350BW and the control interface.
davide.aliprandi@st.com 3:c688a4acb4bf 141 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 142 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise.
davide.aliprandi@st.com 3:c688a4acb4bf 143 */
davide.aliprandi@st.com 3:c688a4acb4bf 144 int32_t STA350BW::STA350BW_DeInit(void)
davide.aliprandi@st.com 3:c688a4acb4bf 145 {
davide.aliprandi@st.com 3:c688a4acb4bf 146 if (STA350BW_PowerOff() != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 147 {
davide.aliprandi@st.com 3:c688a4acb4bf 148 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 149 }
davide.aliprandi@st.com 3:c688a4acb4bf 150 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 151 }
davide.aliprandi@st.com 3:c688a4acb4bf 152
davide.aliprandi@st.com 3:c688a4acb4bf 153 /**
davide.aliprandi@st.com 3:c688a4acb4bf 154 * @brief Read the device ID.
davide.aliprandi@st.com 3:c688a4acb4bf 155 * @param id: identifier.
davide.aliprandi@st.com 3:c688a4acb4bf 156 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 157 */
davide.aliprandi@st.com 3:c688a4acb4bf 158 int32_t STA350BW::STA350BW_ReadID(uint8_t *id)
davide.aliprandi@st.com 3:c688a4acb4bf 159 {
davide.aliprandi@st.com 3:c688a4acb4bf 160 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 161 }
davide.aliprandi@st.com 3:c688a4acb4bf 162
davide.aliprandi@st.com 3:c688a4acb4bf 163 /**
davide.aliprandi@st.com 3:c688a4acb4bf 164 * @brief Start the audio play.
davide.aliprandi@st.com 3:c688a4acb4bf 165 * @param *pData: pointer to audio data.
davide.aliprandi@st.com 3:c688a4acb4bf 166 * @param Size: size of the data buffer.
davide.aliprandi@st.com 3:c688a4acb4bf 167 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 168 */
davide.aliprandi@st.com 3:c688a4acb4bf 169 int32_t STA350BW::STA350BW_Play(int16_t *pData, uint16_t Size)
davide.aliprandi@st.com 3:c688a4acb4bf 170 {
davide.aliprandi@st.com 3:c688a4acb4bf 171 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 172 }
davide.aliprandi@st.com 3:c688a4acb4bf 173
davide.aliprandi@st.com 3:c688a4acb4bf 174 /**
davide.aliprandi@st.com 3:c688a4acb4bf 175 * @brief Pause the audio play.
davide.aliprandi@st.com 3:c688a4acb4bf 176 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 177 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 178 */
davide.aliprandi@st.com 3:c688a4acb4bf 179 int32_t STA350BW::STA350BW_Pause(void)
davide.aliprandi@st.com 3:c688a4acb4bf 180 {
davide.aliprandi@st.com 3:c688a4acb4bf 181 /* Mute the output*/
davide.aliprandi@st.com 3:c688a4acb4bf 182 if (STA350BW_SetMute(STA350BW_CHANNEL_MASTER, STA350BW_ENABLE) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 183 {
davide.aliprandi@st.com 3:c688a4acb4bf 184 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 185 }
davide.aliprandi@st.com 3:c688a4acb4bf 186 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 187 }
davide.aliprandi@st.com 3:c688a4acb4bf 188
davide.aliprandi@st.com 3:c688a4acb4bf 189 /**
davide.aliprandi@st.com 3:c688a4acb4bf 190 * @brief Resume the audio play.
davide.aliprandi@st.com 3:c688a4acb4bf 191 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 192 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 193 */
davide.aliprandi@st.com 3:c688a4acb4bf 194 int32_t STA350BW::STA350BW_Resume(void)
davide.aliprandi@st.com 3:c688a4acb4bf 195 {
davide.aliprandi@st.com 3:c688a4acb4bf 196 /* Unmute the output*/
davide.aliprandi@st.com 3:c688a4acb4bf 197 if (STA350BW_SetMute(STA350BW_CHANNEL_MASTER, STA350BW_DISABLE) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 198 {
davide.aliprandi@st.com 3:c688a4acb4bf 199 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 200 }
davide.aliprandi@st.com 3:c688a4acb4bf 201 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 202 }
davide.aliprandi@st.com 3:c688a4acb4bf 203
davide.aliprandi@st.com 3:c688a4acb4bf 204 /**
davide.aliprandi@st.com 3:c688a4acb4bf 205 * @brief Control the mute features of the STA350BW.
davide.aliprandi@st.com 3:c688a4acb4bf 206 * @param channel: channel to be muted.
davide.aliprandi@st.com 3:c688a4acb4bf 207 * This parameter can be a value of @ref STA350BW_channel_define
davide.aliprandi@st.com 3:c688a4acb4bf 208 * @param state: enable disable parameter
davide.aliprandi@st.com 3:c688a4acb4bf 209 * This parameter can be a value of @ref STA350BW_state_define
davide.aliprandi@st.com 3:c688a4acb4bf 210 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 211 */
davide.aliprandi@st.com 3:c688a4acb4bf 212 int32_t STA350BW::STA350BW_SetMute(uint8_t channel, uint8_t state)
davide.aliprandi@st.com 3:c688a4acb4bf 213 {
davide.aliprandi@st.com 3:c688a4acb4bf 214 uint8_t tmp;
davide.aliprandi@st.com 3:c688a4acb4bf 215
davide.aliprandi@st.com 3:c688a4acb4bf 216 if (STA350BW_IO_Read(STA350BW_MUTE, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 217 {
davide.aliprandi@st.com 3:c688a4acb4bf 218 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 219 }
davide.aliprandi@st.com 3:c688a4acb4bf 220 if (state == STA350BW_ENABLE)
davide.aliprandi@st.com 3:c688a4acb4bf 221 {
davide.aliprandi@st.com 3:c688a4acb4bf 222 tmp |= channel;
davide.aliprandi@st.com 3:c688a4acb4bf 223 } else
davide.aliprandi@st.com 3:c688a4acb4bf 224 {
davide.aliprandi@st.com 3:c688a4acb4bf 225 tmp &= ~channel;
davide.aliprandi@st.com 3:c688a4acb4bf 226 }
davide.aliprandi@st.com 3:c688a4acb4bf 227
davide.aliprandi@st.com 3:c688a4acb4bf 228 if (STA350BW_IO_Write(STA350BW_MUTE, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 229 {
davide.aliprandi@st.com 3:c688a4acb4bf 230 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 231 }
davide.aliprandi@st.com 3:c688a4acb4bf 232 return COMPONENT_OK;
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 Control the volume features of the STA350BW.
davide.aliprandi@st.com 3:c688a4acb4bf 237 * @param channel: channel to be controlled.
davide.aliprandi@st.com 3:c688a4acb4bf 238 * This parameter can be a value of @ref STA350BW_channel_define
davide.aliprandi@st.com 3:c688a4acb4bf 239 * @param volume: volume to be set
davide.aliprandi@st.com 3:c688a4acb4bf 240 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 241 */
davide.aliprandi@st.com 3:c688a4acb4bf 242 int32_t STA350BW::STA350BW_SetVolume(uint8_t channel, uint8_t value)
davide.aliprandi@st.com 3:c688a4acb4bf 243 {
davide.aliprandi@st.com 3:c688a4acb4bf 244 /*Setup volume */
davide.aliprandi@st.com 3:c688a4acb4bf 245 uint8_t tmp = value;
davide.aliprandi@st.com 3:c688a4acb4bf 246 if (STA350BW_IO_Write(STA350BW_MVOL + channel, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 247 {
davide.aliprandi@st.com 3:c688a4acb4bf 248 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 249 }
davide.aliprandi@st.com 3:c688a4acb4bf 250 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 251 }
davide.aliprandi@st.com 3:c688a4acb4bf 252
davide.aliprandi@st.com 3:c688a4acb4bf 253 /**
davide.aliprandi@st.com 3:c688a4acb4bf 254 * @brief set the sampling frequency for STA350BW.
davide.aliprandi@st.com 3:c688a4acb4bf 255 * @param audio_freq: audio frequency to be set.
davide.aliprandi@st.com 3:c688a4acb4bf 256 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 257 */
davide.aliprandi@st.com 3:c688a4acb4bf 258 int32_t STA350BW::STA350BW_SetFrequency(uint32_t audio_freq)
davide.aliprandi@st.com 3:c688a4acb4bf 259 {
davide.aliprandi@st.com 3:c688a4acb4bf 260 uint8_t tmp;
davide.aliprandi@st.com 3:c688a4acb4bf 261
davide.aliprandi@st.com 3:c688a4acb4bf 262 if (STA350BW_IO_Read(STA350BW_CONF_REGA, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 263 {
davide.aliprandi@st.com 3:c688a4acb4bf 264 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 265 }
davide.aliprandi@st.com 3:c688a4acb4bf 266
davide.aliprandi@st.com 3:c688a4acb4bf 267 tmp &= ~0x1F;
davide.aliprandi@st.com 3:c688a4acb4bf 268
davide.aliprandi@st.com 3:c688a4acb4bf 269 if (audio_freq == STA350BW_Fs_32000 || audio_freq == STA350BW_Fs_44100 || audio_freq == STA350BW_Fs_48000)
davide.aliprandi@st.com 3:c688a4acb4bf 270 {
davide.aliprandi@st.com 3:c688a4acb4bf 271 tmp |= STA350BW_MCLK_256_LR_48K;
davide.aliprandi@st.com 3:c688a4acb4bf 272 }
davide.aliprandi@st.com 3:c688a4acb4bf 273 else if (audio_freq == STA350BW_Fs_88200 || audio_freq == STA350BW_Fs_96000)
davide.aliprandi@st.com 3:c688a4acb4bf 274 {
davide.aliprandi@st.com 3:c688a4acb4bf 275 tmp |= STA350BW_MCLK_256_LR_96K;
davide.aliprandi@st.com 3:c688a4acb4bf 276 }
davide.aliprandi@st.com 3:c688a4acb4bf 277 else
davide.aliprandi@st.com 3:c688a4acb4bf 278 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 279
davide.aliprandi@st.com 3:c688a4acb4bf 280 if (STA350BW_IO_Write(STA350BW_CONF_REGA, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 281 {
davide.aliprandi@st.com 3:c688a4acb4bf 282 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 283 }
davide.aliprandi@st.com 3:c688a4acb4bf 284
davide.aliprandi@st.com 3:c688a4acb4bf 285 /* Set I2S audio frequency. */
davide.aliprandi@st.com 3:c688a4acb4bf 286 dev_i2s.audio_frequency(audio_freq);
davide.aliprandi@st.com 3:c688a4acb4bf 287
davide.aliprandi@st.com 3:c688a4acb4bf 288 return COMPONENT_OK;
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 * @brief Set equalization parameters for STA350BW biquad section.
davide.aliprandi@st.com 3:c688a4acb4bf 293 * @param ram_block: ram block to be set
davide.aliprandi@st.com 3:c688a4acb4bf 294 * @param filter_number: filter number
davide.aliprandi@st.com 3:c688a4acb4bf 295 * @param *filter_values: pointer to a uint32_t array containing filter coefficients
davide.aliprandi@st.com 3:c688a4acb4bf 296 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 297 */
davide.aliprandi@st.com 3:c688a4acb4bf 298 int32_t STA350BW::STA350BW_SetEq(uint8_t ram_block, uint8_t filter_number, uint32_t * filter_values)
davide.aliprandi@st.com 3:c688a4acb4bf 299 {
davide.aliprandi@st.com 3:c688a4acb4bf 300 /*5 is due to the ram adressing: first filter is on the adresses 0x00 to 0x04; the second is on 0x05 to 0x09 ...*/
davide.aliprandi@st.com 3:c688a4acb4bf 301 STA350BW_WriteRAMSet(ram_block, filter_number * 5, (uint8_t *) filter_values);
davide.aliprandi@st.com 3:c688a4acb4bf 302 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 303 }
davide.aliprandi@st.com 3:c688a4acb4bf 304
davide.aliprandi@st.com 3:c688a4acb4bf 305 /**
davide.aliprandi@st.com 3:c688a4acb4bf 306 * @brief Set tone value in the STA350BW tone register.
davide.aliprandi@st.com 3:c688a4acb4bf 307 * @param tone_gain: gain of the tone control
davide.aliprandi@st.com 3:c688a4acb4bf 308 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 309 */
davide.aliprandi@st.com 3:c688a4acb4bf 310 int32_t STA350BW::STA350BW_SetTone(uint8_t tone_gain)
davide.aliprandi@st.com 3:c688a4acb4bf 311 {
davide.aliprandi@st.com 3:c688a4acb4bf 312 uint8_t tmp = tone_gain;
davide.aliprandi@st.com 3:c688a4acb4bf 313
davide.aliprandi@st.com 3:c688a4acb4bf 314 if (STA350BW_IO_Write(STA350BW_TONE, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 315 {
davide.aliprandi@st.com 3:c688a4acb4bf 316 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 317 }
davide.aliprandi@st.com 3:c688a4acb4bf 318 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 319 }
davide.aliprandi@st.com 3:c688a4acb4bf 320
davide.aliprandi@st.com 3:c688a4acb4bf 321 /**
davide.aliprandi@st.com 3:c688a4acb4bf 322 * @brief Power on the device.
davide.aliprandi@st.com 3:c688a4acb4bf 323 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 324 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 325 */
davide.aliprandi@st.com 3:c688a4acb4bf 326 int32_t STA350BW::STA350BW_PowerOn(void)
davide.aliprandi@st.com 3:c688a4acb4bf 327 {
davide.aliprandi@st.com 3:c688a4acb4bf 328 uint8_t tmp;
davide.aliprandi@st.com 3:c688a4acb4bf 329 if (STA350BW_IO_Read(STA350BW_CONF_REGF, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 330 {
davide.aliprandi@st.com 3:c688a4acb4bf 331 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 332 }
davide.aliprandi@st.com 3:c688a4acb4bf 333 tmp |= 0xC0;
davide.aliprandi@st.com 3:c688a4acb4bf 334 if (STA350BW_IO_Write(STA350BW_CONF_REGF, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 335 {
davide.aliprandi@st.com 3:c688a4acb4bf 336 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 337 }
davide.aliprandi@st.com 3:c688a4acb4bf 338 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 339 }
davide.aliprandi@st.com 3:c688a4acb4bf 340
davide.aliprandi@st.com 3:c688a4acb4bf 341 /**
davide.aliprandi@st.com 3:c688a4acb4bf 342 * @brief Power off the device.
davide.aliprandi@st.com 3:c688a4acb4bf 343 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 344 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 345 */
davide.aliprandi@st.com 3:c688a4acb4bf 346 int32_t STA350BW::STA350BW_PowerOff(void)
davide.aliprandi@st.com 3:c688a4acb4bf 347 {
davide.aliprandi@st.com 3:c688a4acb4bf 348 uint8_t tmp;
davide.aliprandi@st.com 3:c688a4acb4bf 349 if (STA350BW_IO_Read(STA350BW_CONF_REGF, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 350 {
davide.aliprandi@st.com 3:c688a4acb4bf 351 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 352 }
davide.aliprandi@st.com 3:c688a4acb4bf 353 tmp &= ~0xC0;
davide.aliprandi@st.com 3:c688a4acb4bf 354 if (STA350BW_IO_Write(STA350BW_CONF_REGF, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 355 {
davide.aliprandi@st.com 3:c688a4acb4bf 356 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 357 }
davide.aliprandi@st.com 3:c688a4acb4bf 358 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 359 }
davide.aliprandi@st.com 3:c688a4acb4bf 360
davide.aliprandi@st.com 3:c688a4acb4bf 361 /**
davide.aliprandi@st.com 3:c688a4acb4bf 362 * @brief Stop audio stream.
davide.aliprandi@st.com 3:c688a4acb4bf 363 * @param None.
davide.aliprandi@st.com 3:c688a4acb4bf 364 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 365 */
davide.aliprandi@st.com 3:c688a4acb4bf 366 int32_t STA350BW::STA350BW_Stop(void)
davide.aliprandi@st.com 3:c688a4acb4bf 367 {
davide.aliprandi@st.com 3:c688a4acb4bf 368 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 369 }
davide.aliprandi@st.com 3:c688a4acb4bf 370
davide.aliprandi@st.com 3:c688a4acb4bf 371 /**
davide.aliprandi@st.com 3:c688a4acb4bf 372 * @brief Reset device.
davide.aliprandi@st.com 3:c688a4acb4bf 373 * @param NOne.
davide.aliprandi@st.com 3:c688a4acb4bf 374 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 375 */
davide.aliprandi@st.com 3:c688a4acb4bf 376 int32_t STA350BW::STA350BW_Reset(void)
davide.aliprandi@st.com 3:c688a4acb4bf 377 {
davide.aliprandi@st.com 3:c688a4acb4bf 378 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 379 }
davide.aliprandi@st.com 3:c688a4acb4bf 380
davide.aliprandi@st.com 3:c688a4acb4bf 381 /**
davide.aliprandi@st.com 3:c688a4acb4bf 382 * @brief This function can be used to set advanced DSP options in order to
davide.aliprandi@st.com 3:c688a4acb4bf 383 * use advanced features on the STA350BW device.
davide.aliprandi@st.com 3:c688a4acb4bf 384 * @param option: specific option to be setted up
davide.aliprandi@st.com 3:c688a4acb4bf 385 * This parameter can be a value of @ref STA350BW_DSP_option_selection
davide.aliprandi@st.com 3:c688a4acb4bf 386 * @param state: state of the option to be controlled. Depending on the selected
davide.aliprandi@st.com 3:c688a4acb4bf 387 * DSP feature to be controlled, this value can be either ENABLE/DISABLE
davide.aliprandi@st.com 3:c688a4acb4bf 388 * or a specific numerical parameter related to the specific DSP function.
davide.aliprandi@st.com 3:c688a4acb4bf 389 * This parameter can be a value of @ref STA350BW_state_define
davide.aliprandi@st.com 3:c688a4acb4bf 390 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 391 */
davide.aliprandi@st.com 3:c688a4acb4bf 392 int32_t STA350BW::STA350BW_SetDSPOption(uint8_t option, uint8_t state)
davide.aliprandi@st.com 3:c688a4acb4bf 393 {
davide.aliprandi@st.com 3:c688a4acb4bf 394 uint8_t tmp = 0;
davide.aliprandi@st.com 3:c688a4acb4bf 395
davide.aliprandi@st.com 3:c688a4acb4bf 396 switch (option)
davide.aliprandi@st.com 3:c688a4acb4bf 397 {
davide.aliprandi@st.com 3:c688a4acb4bf 398 case STA350BW_DSPB:
davide.aliprandi@st.com 3:c688a4acb4bf 399 {
davide.aliprandi@st.com 3:c688a4acb4bf 400 if (STA350BW_IO_Read(STA350BW_CONF_REGD, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 401 {
davide.aliprandi@st.com 3:c688a4acb4bf 402 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 403 }
davide.aliprandi@st.com 3:c688a4acb4bf 404 tmp &= ~0x04;
davide.aliprandi@st.com 3:c688a4acb4bf 405 tmp |= state << 0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 406
davide.aliprandi@st.com 3:c688a4acb4bf 407 if (STA350BW_IO_Write(STA350BW_CONF_REGD, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 408 {
davide.aliprandi@st.com 3:c688a4acb4bf 409 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 410 }
davide.aliprandi@st.com 3:c688a4acb4bf 411 break;
davide.aliprandi@st.com 3:c688a4acb4bf 412 }
davide.aliprandi@st.com 3:c688a4acb4bf 413 case STA350BW_HPB:
davide.aliprandi@st.com 3:c688a4acb4bf 414 {
davide.aliprandi@st.com 3:c688a4acb4bf 415 if (STA350BW_IO_Read(STA350BW_CONF_REGD, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 416 {
davide.aliprandi@st.com 3:c688a4acb4bf 417 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 418 }
davide.aliprandi@st.com 3:c688a4acb4bf 419 tmp &= ~0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 420 tmp |= state << 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 421
davide.aliprandi@st.com 3:c688a4acb4bf 422 if (STA350BW_IO_Write(STA350BW_CONF_REGD, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 423 {
davide.aliprandi@st.com 3:c688a4acb4bf 424 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 425 }
davide.aliprandi@st.com 3:c688a4acb4bf 426 break;
davide.aliprandi@st.com 3:c688a4acb4bf 427 }
davide.aliprandi@st.com 3:c688a4acb4bf 428 case STA350BW_DEMP:
davide.aliprandi@st.com 3:c688a4acb4bf 429 {
davide.aliprandi@st.com 3:c688a4acb4bf 430 if (STA350BW_IO_Read(STA350BW_CONF_REGD, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 431 {
davide.aliprandi@st.com 3:c688a4acb4bf 432 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 433 }
davide.aliprandi@st.com 3:c688a4acb4bf 434 tmp &= ~0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 435 tmp |= state << 0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 436
davide.aliprandi@st.com 3:c688a4acb4bf 437 if (STA350BW_IO_Write(STA350BW_CONF_REGD, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 438 {
davide.aliprandi@st.com 3:c688a4acb4bf 439 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 440 }
davide.aliprandi@st.com 3:c688a4acb4bf 441 break;
davide.aliprandi@st.com 3:c688a4acb4bf 442 }
davide.aliprandi@st.com 3:c688a4acb4bf 443 case STA350BW_BQL:
davide.aliprandi@st.com 3:c688a4acb4bf 444 {
davide.aliprandi@st.com 3:c688a4acb4bf 445 if (STA350BW_IO_Read(STA350BW_CONF_REGD, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 446 {
davide.aliprandi@st.com 3:c688a4acb4bf 447 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 448 }
davide.aliprandi@st.com 3:c688a4acb4bf 449 tmp &= ~0x08;
davide.aliprandi@st.com 3:c688a4acb4bf 450 tmp |= state << 0x04;
davide.aliprandi@st.com 3:c688a4acb4bf 451
davide.aliprandi@st.com 3:c688a4acb4bf 452 if (STA350BW_IO_Write(STA350BW_CONF_REGD, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 453 {
davide.aliprandi@st.com 3:c688a4acb4bf 454 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 455 }
davide.aliprandi@st.com 3:c688a4acb4bf 456 break;
davide.aliprandi@st.com 3:c688a4acb4bf 457 }
davide.aliprandi@st.com 3:c688a4acb4bf 458 case STA350BW_BQ5:
davide.aliprandi@st.com 3:c688a4acb4bf 459 {
davide.aliprandi@st.com 3:c688a4acb4bf 460 if (STA350BW_IO_Read(STA350BW_CONFX, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 461 {
davide.aliprandi@st.com 3:c688a4acb4bf 462 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 463 }
davide.aliprandi@st.com 3:c688a4acb4bf 464 tmp &= ~0x04;
davide.aliprandi@st.com 3:c688a4acb4bf 465 tmp |= state << 0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 466
davide.aliprandi@st.com 3:c688a4acb4bf 467 if (STA350BW_IO_Write(STA350BW_CONFX, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 468 {
davide.aliprandi@st.com 3:c688a4acb4bf 469 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 470 }
davide.aliprandi@st.com 3:c688a4acb4bf 471 break;
davide.aliprandi@st.com 3:c688a4acb4bf 472 }
davide.aliprandi@st.com 3:c688a4acb4bf 473 case STA350BW_BQ6:
davide.aliprandi@st.com 3:c688a4acb4bf 474 {
davide.aliprandi@st.com 3:c688a4acb4bf 475 if (STA350BW_IO_Read(STA350BW_CONFX, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 476 {
davide.aliprandi@st.com 3:c688a4acb4bf 477 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 478 }
davide.aliprandi@st.com 3:c688a4acb4bf 479 tmp &= ~0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 480 tmp |= state << 0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 481
davide.aliprandi@st.com 3:c688a4acb4bf 482 if (STA350BW_IO_Write(STA350BW_CONFX, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 483 {
davide.aliprandi@st.com 3:c688a4acb4bf 484 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 485 }
davide.aliprandi@st.com 3:c688a4acb4bf 486 break;
davide.aliprandi@st.com 3:c688a4acb4bf 487 }
davide.aliprandi@st.com 3:c688a4acb4bf 488 case STA350BW_BQ7:
davide.aliprandi@st.com 3:c688a4acb4bf 489 {
davide.aliprandi@st.com 3:c688a4acb4bf 490 if (STA350BW_IO_Read(STA350BW_CONFX, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 491 {
davide.aliprandi@st.com 3:c688a4acb4bf 492 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 493 }
davide.aliprandi@st.com 3:c688a4acb4bf 494 tmp &= ~0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 495 tmp |= state << 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 496
davide.aliprandi@st.com 3:c688a4acb4bf 497 if (STA350BW_IO_Write(STA350BW_CONFX, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 498 {
davide.aliprandi@st.com 3:c688a4acb4bf 499 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 500 }
davide.aliprandi@st.com 3:c688a4acb4bf 501 break;
davide.aliprandi@st.com 3:c688a4acb4bf 502 }
davide.aliprandi@st.com 3:c688a4acb4bf 503 case STA350BW_C1EQBP:
davide.aliprandi@st.com 3:c688a4acb4bf 504 {
davide.aliprandi@st.com 3:c688a4acb4bf 505 if (STA350BW_IO_Read(STA350BW_C1CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 506 {
davide.aliprandi@st.com 3:c688a4acb4bf 507 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 508 }
davide.aliprandi@st.com 3:c688a4acb4bf 509 tmp &= ~0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 510 tmp |= state << 0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 511
davide.aliprandi@st.com 3:c688a4acb4bf 512 if (STA350BW_IO_Write(STA350BW_C1CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 513 {
davide.aliprandi@st.com 3:c688a4acb4bf 514 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 515 }
davide.aliprandi@st.com 3:c688a4acb4bf 516 break;
davide.aliprandi@st.com 3:c688a4acb4bf 517 }
davide.aliprandi@st.com 3:c688a4acb4bf 518 case STA350BW_C2EQBP:
davide.aliprandi@st.com 3:c688a4acb4bf 519 {
davide.aliprandi@st.com 3:c688a4acb4bf 520 if (STA350BW_IO_Read(STA350BW_C2CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 521 {
davide.aliprandi@st.com 3:c688a4acb4bf 522 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 523 }
davide.aliprandi@st.com 3:c688a4acb4bf 524 tmp &= ~0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 525 tmp |= state << 0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 526
davide.aliprandi@st.com 3:c688a4acb4bf 527 if (STA350BW_IO_Write(STA350BW_C2CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 528 {
davide.aliprandi@st.com 3:c688a4acb4bf 529 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 530 }
davide.aliprandi@st.com 3:c688a4acb4bf 531 break;
davide.aliprandi@st.com 3:c688a4acb4bf 532 }
davide.aliprandi@st.com 3:c688a4acb4bf 533 case STA350BW_C1TCB:
davide.aliprandi@st.com 3:c688a4acb4bf 534 {
davide.aliprandi@st.com 3:c688a4acb4bf 535 if (STA350BW_IO_Read(STA350BW_C1CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 536 {
davide.aliprandi@st.com 3:c688a4acb4bf 537 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 538 }
davide.aliprandi@st.com 3:c688a4acb4bf 539 tmp &= ~0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 540 tmp |= state << 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 541
davide.aliprandi@st.com 3:c688a4acb4bf 542 if (STA350BW_IO_Write(STA350BW_C1CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 543 {
davide.aliprandi@st.com 3:c688a4acb4bf 544 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 545 }
davide.aliprandi@st.com 3:c688a4acb4bf 546 break;
davide.aliprandi@st.com 3:c688a4acb4bf 547 }
davide.aliprandi@st.com 3:c688a4acb4bf 548 case STA350BW_C2TCB:
davide.aliprandi@st.com 3:c688a4acb4bf 549 {
davide.aliprandi@st.com 3:c688a4acb4bf 550 if (STA350BW_IO_Read(STA350BW_C2CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 551 {
davide.aliprandi@st.com 3:c688a4acb4bf 552 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 553 }
davide.aliprandi@st.com 3:c688a4acb4bf 554 tmp &= ~0x01;
davide.aliprandi@st.com 3:c688a4acb4bf 555 tmp |= state << 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 556
davide.aliprandi@st.com 3:c688a4acb4bf 557 if (STA350BW_IO_Write(STA350BW_C2CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 558 {
davide.aliprandi@st.com 3:c688a4acb4bf 559 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 560 }
davide.aliprandi@st.com 3:c688a4acb4bf 561 break;
davide.aliprandi@st.com 3:c688a4acb4bf 562 }
davide.aliprandi@st.com 3:c688a4acb4bf 563 case STA350BW_C1VBP:
davide.aliprandi@st.com 3:c688a4acb4bf 564 {
davide.aliprandi@st.com 3:c688a4acb4bf 565 if (STA350BW_IO_Read(STA350BW_C1CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 566 {
davide.aliprandi@st.com 3:c688a4acb4bf 567 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 568 }
davide.aliprandi@st.com 3:c688a4acb4bf 569 tmp &= ~0x04;
davide.aliprandi@st.com 3:c688a4acb4bf 570 tmp |= state << 0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 571
davide.aliprandi@st.com 3:c688a4acb4bf 572 if (STA350BW_IO_Write(STA350BW_C1CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 573 {
davide.aliprandi@st.com 3:c688a4acb4bf 574 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 575 }
davide.aliprandi@st.com 3:c688a4acb4bf 576 break;
davide.aliprandi@st.com 3:c688a4acb4bf 577 }
davide.aliprandi@st.com 3:c688a4acb4bf 578 case STA350BW_C2VBP:
davide.aliprandi@st.com 3:c688a4acb4bf 579 {
davide.aliprandi@st.com 3:c688a4acb4bf 580 if (STA350BW_IO_Read(STA350BW_C2CFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 581 {
davide.aliprandi@st.com 3:c688a4acb4bf 582 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 583 }
davide.aliprandi@st.com 3:c688a4acb4bf 584 tmp &= ~0x04;
davide.aliprandi@st.com 3:c688a4acb4bf 585 tmp |= state << 0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 586
davide.aliprandi@st.com 3:c688a4acb4bf 587 if (STA350BW_IO_Write(STA350BW_C2CFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 588 {
davide.aliprandi@st.com 3:c688a4acb4bf 589 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 590 }
davide.aliprandi@st.com 3:c688a4acb4bf 591 break;
davide.aliprandi@st.com 3:c688a4acb4bf 592 }
davide.aliprandi@st.com 3:c688a4acb4bf 593 case STA350BW_EXT_RANGE_BQ1:
davide.aliprandi@st.com 3:c688a4acb4bf 594 {
davide.aliprandi@st.com 3:c688a4acb4bf 595 if (STA350BW_IO_Read(STA350BW_CXT_B4B1, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 596 {
davide.aliprandi@st.com 3:c688a4acb4bf 597 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 598 }
davide.aliprandi@st.com 3:c688a4acb4bf 599 tmp &= ~0x03;
davide.aliprandi@st.com 3:c688a4acb4bf 600 tmp |= (state>>1);
davide.aliprandi@st.com 3:c688a4acb4bf 601
davide.aliprandi@st.com 3:c688a4acb4bf 602 if (STA350BW_IO_Write(STA350BW_CXT_B4B1, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 603 {
davide.aliprandi@st.com 3:c688a4acb4bf 604 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 605 }
davide.aliprandi@st.com 3:c688a4acb4bf 606 break;
davide.aliprandi@st.com 3:c688a4acb4bf 607 }
davide.aliprandi@st.com 3:c688a4acb4bf 608 case STA350BW_EXT_RANGE_BQ2:
davide.aliprandi@st.com 3:c688a4acb4bf 609 {
davide.aliprandi@st.com 3:c688a4acb4bf 610 if (STA350BW_IO_Read(STA350BW_CXT_B4B1, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 611 {
davide.aliprandi@st.com 3:c688a4acb4bf 612 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 613 }
davide.aliprandi@st.com 3:c688a4acb4bf 614 tmp &= ~0x0C;
davide.aliprandi@st.com 3:c688a4acb4bf 615 tmp |= (state>>1) << 2;
davide.aliprandi@st.com 3:c688a4acb4bf 616
davide.aliprandi@st.com 3:c688a4acb4bf 617 if (STA350BW_IO_Write(STA350BW_CXT_B4B1, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 618 {
davide.aliprandi@st.com 3:c688a4acb4bf 619 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 620 }
davide.aliprandi@st.com 3:c688a4acb4bf 621 break;
davide.aliprandi@st.com 3:c688a4acb4bf 622 }
davide.aliprandi@st.com 3:c688a4acb4bf 623 case STA350BW_EXT_RANGE_BQ3:
davide.aliprandi@st.com 3:c688a4acb4bf 624 {
davide.aliprandi@st.com 3:c688a4acb4bf 625 if (STA350BW_IO_Read(STA350BW_CXT_B4B1, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 626 {
davide.aliprandi@st.com 3:c688a4acb4bf 627 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 628 }
davide.aliprandi@st.com 3:c688a4acb4bf 629 tmp &= ~0x30;
davide.aliprandi@st.com 3:c688a4acb4bf 630 tmp |= (state>>1) << 4;
davide.aliprandi@st.com 3:c688a4acb4bf 631
davide.aliprandi@st.com 3:c688a4acb4bf 632 if (STA350BW_IO_Write(STA350BW_CXT_B4B1, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 633 {
davide.aliprandi@st.com 3:c688a4acb4bf 634 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 635 }
davide.aliprandi@st.com 3:c688a4acb4bf 636 break;
davide.aliprandi@st.com 3:c688a4acb4bf 637 }
davide.aliprandi@st.com 3:c688a4acb4bf 638 case STA350BW_EXT_RANGE_BQ4:
davide.aliprandi@st.com 3:c688a4acb4bf 639 {
davide.aliprandi@st.com 3:c688a4acb4bf 640 if (STA350BW_IO_Read(STA350BW_CXT_B4B1, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 641 {
davide.aliprandi@st.com 3:c688a4acb4bf 642 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 643 }
davide.aliprandi@st.com 3:c688a4acb4bf 644 tmp &= ~0xC0;
davide.aliprandi@st.com 3:c688a4acb4bf 645 tmp |= (state>>1) << 6;
davide.aliprandi@st.com 3:c688a4acb4bf 646
davide.aliprandi@st.com 3:c688a4acb4bf 647 if (STA350BW_IO_Write(STA350BW_CXT_B4B1, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 648 {
davide.aliprandi@st.com 3:c688a4acb4bf 649 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 650 }
davide.aliprandi@st.com 3:c688a4acb4bf 651 break;
davide.aliprandi@st.com 3:c688a4acb4bf 652 }
davide.aliprandi@st.com 3:c688a4acb4bf 653 case STA350BW_EXT_RANGE_BQ5:
davide.aliprandi@st.com 3:c688a4acb4bf 654 {
davide.aliprandi@st.com 3:c688a4acb4bf 655 if (STA350BW_IO_Read(STA350BW_CXT_B7B5, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 656 {
davide.aliprandi@st.com 3:c688a4acb4bf 657 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 658 }
davide.aliprandi@st.com 3:c688a4acb4bf 659 tmp &= ~0x03;
davide.aliprandi@st.com 3:c688a4acb4bf 660 tmp |= (state>>1);
davide.aliprandi@st.com 3:c688a4acb4bf 661
davide.aliprandi@st.com 3:c688a4acb4bf 662 if (STA350BW_IO_Write(STA350BW_CXT_B7B5, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 663 {
davide.aliprandi@st.com 3:c688a4acb4bf 664 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 665 }
davide.aliprandi@st.com 3:c688a4acb4bf 666 break;
davide.aliprandi@st.com 3:c688a4acb4bf 667 }
davide.aliprandi@st.com 3:c688a4acb4bf 668 case STA350BW_EXT_RANGE_BQ6:
davide.aliprandi@st.com 3:c688a4acb4bf 669 {
davide.aliprandi@st.com 3:c688a4acb4bf 670 if (STA350BW_IO_Read(STA350BW_CXT_B7B5, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 671 {
davide.aliprandi@st.com 3:c688a4acb4bf 672 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 673 }
davide.aliprandi@st.com 3:c688a4acb4bf 674 tmp &= ~0x0C;
davide.aliprandi@st.com 3:c688a4acb4bf 675 tmp |= (state>>1) << 2;
davide.aliprandi@st.com 3:c688a4acb4bf 676
davide.aliprandi@st.com 3:c688a4acb4bf 677 if (STA350BW_IO_Write(STA350BW_CXT_B7B5, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 678 {
davide.aliprandi@st.com 3:c688a4acb4bf 679 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 680 }
davide.aliprandi@st.com 3:c688a4acb4bf 681 break;
davide.aliprandi@st.com 3:c688a4acb4bf 682 }
davide.aliprandi@st.com 3:c688a4acb4bf 683 case STA350BW_EXT_RANGE_BQ7:
davide.aliprandi@st.com 3:c688a4acb4bf 684 {
davide.aliprandi@st.com 3:c688a4acb4bf 685 if (STA350BW_IO_Read(STA350BW_CXT_B7B5, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 686 {
davide.aliprandi@st.com 3:c688a4acb4bf 687 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 688 }
davide.aliprandi@st.com 3:c688a4acb4bf 689 tmp &= ~0x30;
davide.aliprandi@st.com 3:c688a4acb4bf 690 tmp |= (state>>1) << 4;
davide.aliprandi@st.com 3:c688a4acb4bf 691
davide.aliprandi@st.com 3:c688a4acb4bf 692 if (STA350BW_IO_Write(STA350BW_CXT_B7B5, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 693 {
davide.aliprandi@st.com 3:c688a4acb4bf 694 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 695 }
davide.aliprandi@st.com 3:c688a4acb4bf 696 break;
davide.aliprandi@st.com 3:c688a4acb4bf 697 }
davide.aliprandi@st.com 3:c688a4acb4bf 698 case STA350BW_RAM_BANK_SELECT:
davide.aliprandi@st.com 3:c688a4acb4bf 699 {
davide.aliprandi@st.com 3:c688a4acb4bf 700 if (STA350BW_IO_Read(STA350BW_EQCFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 701 {
davide.aliprandi@st.com 3:c688a4acb4bf 702 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 703 }
davide.aliprandi@st.com 3:c688a4acb4bf 704 tmp &= ~0x03;
davide.aliprandi@st.com 3:c688a4acb4bf 705 tmp |= state;
davide.aliprandi@st.com 3:c688a4acb4bf 706
davide.aliprandi@st.com 3:c688a4acb4bf 707 if (STA350BW_IO_Write(STA350BW_EQCFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 708 {
davide.aliprandi@st.com 3:c688a4acb4bf 709 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 710 }
davide.aliprandi@st.com 3:c688a4acb4bf 711 break;
davide.aliprandi@st.com 3:c688a4acb4bf 712 }
davide.aliprandi@st.com 3:c688a4acb4bf 713 }
davide.aliprandi@st.com 3:c688a4acb4bf 714 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 715 }
davide.aliprandi@st.com 3:c688a4acb4bf 716
davide.aliprandi@st.com 3:c688a4acb4bf 717 /**
davide.aliprandi@st.com 3:c688a4acb4bf 718 * @brief private function for writing a RAM set.
davide.aliprandi@st.com 3:c688a4acb4bf 719 * @param RAM_block: ram block to be written.
davide.aliprandi@st.com 3:c688a4acb4bf 720 * @param RAM_address: ram address to be written.
davide.aliprandi@st.com 3:c688a4acb4bf 721 * @param *pIn: pointer to the desired value to be write.
davide.aliprandi@st.com 3:c688a4acb4bf 722 * @retval COMPONENT_OK if correct setup, COMPONENT_ERROR otherwise
davide.aliprandi@st.com 3:c688a4acb4bf 723 */
davide.aliprandi@st.com 3:c688a4acb4bf 724 int32_t STA350BW::STA350BW_WriteRAMSet(uint8_t RAM_block, uint8_t RAM_address, uint8_t * pIn)
davide.aliprandi@st.com 3:c688a4acb4bf 725 {
davide.aliprandi@st.com 3:c688a4acb4bf 726 uint8_t tmp = 0x00;
davide.aliprandi@st.com 3:c688a4acb4bf 727 /*choose block*/
davide.aliprandi@st.com 3:c688a4acb4bf 728 if (STA350BW_IO_Read(STA350BW_EQCFG, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 729 {
davide.aliprandi@st.com 3:c688a4acb4bf 730 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 731 }
davide.aliprandi@st.com 3:c688a4acb4bf 732 tmp &= ~0x03;
davide.aliprandi@st.com 3:c688a4acb4bf 733 RAM_block &= 0x03;
davide.aliprandi@st.com 3:c688a4acb4bf 734 tmp |= RAM_block;
davide.aliprandi@st.com 3:c688a4acb4bf 735 if (STA350BW_IO_Write(STA350BW_EQCFG, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 736 {
davide.aliprandi@st.com 3:c688a4acb4bf 737 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 738 }
davide.aliprandi@st.com 3:c688a4acb4bf 739 /*set address*/
davide.aliprandi@st.com 3:c688a4acb4bf 740 if (STA350BW_IO_Read(STA350BW_CFADDR, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 741 {
davide.aliprandi@st.com 3:c688a4acb4bf 742 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 743 }
davide.aliprandi@st.com 3:c688a4acb4bf 744 tmp &= ~0x3F;
davide.aliprandi@st.com 3:c688a4acb4bf 745 RAM_address &= 0x3F;
davide.aliprandi@st.com 3:c688a4acb4bf 746 tmp |= RAM_address;
davide.aliprandi@st.com 3:c688a4acb4bf 747 if (STA350BW_IO_Write(STA350BW_CFADDR, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 748 {
davide.aliprandi@st.com 3:c688a4acb4bf 749 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 750 }
davide.aliprandi@st.com 3:c688a4acb4bf 751 /*write*/
davide.aliprandi@st.com 3:c688a4acb4bf 752 if (STA350BW_IO_Write(STA350BW_B1CF1, pIn[2]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 753 {
davide.aliprandi@st.com 3:c688a4acb4bf 754 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 755 }
davide.aliprandi@st.com 3:c688a4acb4bf 756 if (STA350BW_IO_Write(STA350BW_B1CF2, pIn[1]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 757 {
davide.aliprandi@st.com 3:c688a4acb4bf 758 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 759 }
davide.aliprandi@st.com 3:c688a4acb4bf 760 if (STA350BW_IO_Write(STA350BW_B1CF3, pIn[0]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 761 {
davide.aliprandi@st.com 3:c688a4acb4bf 762 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 763 }
davide.aliprandi@st.com 3:c688a4acb4bf 764 if (STA350BW_IO_Write(STA350BW_B2CF1, pIn[6]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 765 {
davide.aliprandi@st.com 3:c688a4acb4bf 766 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 767 }
davide.aliprandi@st.com 3:c688a4acb4bf 768 if (STA350BW_IO_Write(STA350BW_B2CF2, pIn[5]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 769 {
davide.aliprandi@st.com 3:c688a4acb4bf 770 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 771 }
davide.aliprandi@st.com 3:c688a4acb4bf 772 if (STA350BW_IO_Write(STA350BW_B2CF3, pIn[4]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 773 {
davide.aliprandi@st.com 3:c688a4acb4bf 774 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 775 }
davide.aliprandi@st.com 3:c688a4acb4bf 776 if (STA350BW_IO_Write(STA350BW_A1CF1, pIn[10]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 777 {
davide.aliprandi@st.com 3:c688a4acb4bf 778 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 779 }
davide.aliprandi@st.com 3:c688a4acb4bf 780 if (STA350BW_IO_Write(STA350BW_A1CF2, pIn[9]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 781 {
davide.aliprandi@st.com 3:c688a4acb4bf 782 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 783 }
davide.aliprandi@st.com 3:c688a4acb4bf 784 if (STA350BW_IO_Write(STA350BW_A1CF3, pIn[8]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 785 {
davide.aliprandi@st.com 3:c688a4acb4bf 786 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 787 }
davide.aliprandi@st.com 3:c688a4acb4bf 788 if (STA350BW_IO_Write(STA350BW_A2CF1, pIn[14]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 789 {
davide.aliprandi@st.com 3:c688a4acb4bf 790 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 791 }
davide.aliprandi@st.com 3:c688a4acb4bf 792 if (STA350BW_IO_Write(STA350BW_A2CF2, pIn[13]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 793 {
davide.aliprandi@st.com 3:c688a4acb4bf 794 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 795 }
davide.aliprandi@st.com 3:c688a4acb4bf 796 if (STA350BW_IO_Write(STA350BW_A2CF3, pIn[12]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 797 {
davide.aliprandi@st.com 3:c688a4acb4bf 798 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 799 }
davide.aliprandi@st.com 3:c688a4acb4bf 800 if (STA350BW_IO_Write(STA350BW_B0CF1, pIn[18]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 801 {
davide.aliprandi@st.com 3:c688a4acb4bf 802 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 803 }
davide.aliprandi@st.com 3:c688a4acb4bf 804 if (STA350BW_IO_Write(STA350BW_B0CF2, pIn[17]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 805 {
davide.aliprandi@st.com 3:c688a4acb4bf 806 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 807 }
davide.aliprandi@st.com 3:c688a4acb4bf 808 if (STA350BW_IO_Write(STA350BW_B0CF3, pIn[16]) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 809 {
davide.aliprandi@st.com 3:c688a4acb4bf 810 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 811 }
davide.aliprandi@st.com 3:c688a4acb4bf 812 /*Set WA PIN*/
davide.aliprandi@st.com 3:c688a4acb4bf 813 if (STA350BW_IO_Read(STA350BW_CFUD, &tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 814 {
davide.aliprandi@st.com 3:c688a4acb4bf 815 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 816 }
davide.aliprandi@st.com 3:c688a4acb4bf 817 tmp &= ~0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 818 tmp = 0x02;
davide.aliprandi@st.com 3:c688a4acb4bf 819
davide.aliprandi@st.com 3:c688a4acb4bf 820 if (STA350BW_IO_Write(STA350BW_CFUD, tmp) != 0)
davide.aliprandi@st.com 3:c688a4acb4bf 821 {
davide.aliprandi@st.com 3:c688a4acb4bf 822 return COMPONENT_ERROR;
davide.aliprandi@st.com 3:c688a4acb4bf 823 }
davide.aliprandi@st.com 3:c688a4acb4bf 824 return COMPONENT_OK;
davide.aliprandi@st.com 3:c688a4acb4bf 825 }
davide.aliprandi@st.com 3:c688a4acb4bf 826
davide.aliprandi@st.com 3:c688a4acb4bf 827 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/